摘要:Linux系统管理与开发课程中对于文件的读写操作的认识并且运用C语言进行模拟读、写和复制操作。
文件开关以及读写说明
读操作read()
read(int fd, void *buf, size_t count);
len: 请求读取的字节数
返回值:
-1 :读取失败
0:没有读取到数据
n:读取到的字节数(n:1~len)
实际情况下:
< 0 : 失败
= len: 正常读取
= 0~len-1: 读取完毕
写操作write()
write(int fd, const void *buf, size_t count);
返回值:
-1 :读取失败
n:写入字符个数(n:1~len)
打开文件open()/creat()
creat(文件名称,权限模式); = open(文件名称,O_CREAT,权限模式);
类型:
O_RDONLY | O_WRONLY | O_RDWR | O_APPEND | O_CREAT | O_TRUNC |
---|---|---|---|---|---|
只读 | 只写 | 读写 | 末尾追加 | 若文件存在,此标志无用;若不存在,建新文件 | 若文件存在,则长度被截为0,属性不变 |
权限模式:
S_I <权限><对象>
权限:R, W, X, RWX
对象:USR, GRP, OTH, U, G, O
举个栗子:
1 | usr:rwx; group:rw; other:r; |
tips:
权限位:3个八进制数
764
creat(“test”,010764);
关闭文件close()
close(句柄);
读操作
解释一下int main(int argc, char** argv)
的意思:
例如一条指令:cp abc.txt xyz.log
则 argc = 3
(指令的三个部分) argv[0] = cp
argv[1]=abc.txt
argv[2]= xyz.log
1 |
|
写操作
1 |
|
复制功能的实现
- 打开源文件
- 创建目标文件
- 读取源文件
- 写入目标文件
- 关闭句柄退出
1 |
|
tips:
复制操作中关于文件权限判断和使用的问题未能成功实现,留待下次更新。
—3.18更新—
访问文件(判断权限)
access函数使用方法:
access(“文件名称”,测试权限)
测试权限:
R_OK:读可以
W_OK:写可以
X_OK:执行可以
F_OK:文件存在
返回值:
0:测试成功
-1:测试失败
1 |
|
这就很好的解释了在读写前可以使用access函数判断权限。
1 | 读操作: |
获取状态信息
stat函数:
struct stat st;
stat(“文件名”,&st);
返回值:
-1:失败
st返回值:
st.st_size:文件大小
st.st_mode:文件类型、权限
st.st_xtim:时间相关参数(秒为单位,用ctime转换)
st.mode:
①st.mode&S_IFMT
②宏函数:S_ISDIR、S_ISREG、S_ISLNK、S_ISFIFO、S_ISCHR、S_ISSOCK
获取文件信息
1 |
|
一下为运行截图
获取权限信息并复制到另一文件
1 |
|
如下图所示