目录
橙色
3 系统调用IO
3.1 文件描述符
3.1.1 FILE结构体
查看stdio.h
头文件中,有FILE
结构体的定义:
//stdio.h
typedef struct _iobuf {
char* _ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char* _base; //文件初始位置
int _flag; //文件标志
int _file; //文件有效性
int _charbuf; //缓冲区是否可读取
int _bufsiz; //缓冲区字节数
char* _tmpfname; //临时文件名
} FILE;
其中_file
就是文件描述符。
3.2.2 文件描述符
3.3 open、close、read、write、lseek
3.3.1 文件权限
关于文件权限的相关内容请参考该篇博客:【Linux】用户管理(添加用户、修改密码、删除用户、查询用户信息、切换用户、查看当前用户、用户组)
另外补充一个知识点:
umask
Linux具有默认权限:
- 一个目录被创建,默认权限是
drwxrwxrwx
,即777 - 一个普通文件被创建,默认权限是
-rw-rw-rw-
,即666
但实际上所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask
的影响。umask值表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值。
3.3.2 open
open用于打开或创建一个文件或者设备。
所在头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函数原型1:
int open(const char *pathname, int flags);
- 将准备打开的文件或是设备的名字作为参数path传给函数,flags用来指定文件访问模式。
- open系统调用成功返回一个新的文件描述符,失败返回-1。
其中,flags是由必需文件访问模式和可选模式一起构成的(通过按位或|
):
函数原型2:
int open(const char *pathname, int flags