文件操作的相关系统调用
创建
int creat(const char *filename, mode_t mode);
参数mode 指定新建文件的存取权限,它同umask 一起决定文件的最终权限(mode&umask),其中umask 代表了文件在创建时需要去掉的一些存取权限,它只影响读、写和执行权限,调用函数为int umask(int newmask)。
打开
int open(const char *pathname, int flags);
pathname是我们要打开的文件名(包含路径名称,默认在当前路径下)
flags打开的标志
O_RDONLY 以只读的方式打开文件
O_WRONLY 以只写的方式打开文件
O_RDWR 以读写的方式打开文件
O_APPEND 以追加的方式打开文件
O_CREAT 创建一个文件
O_EXEC 如果使用了O_CREAT而且文件已经存在,就会发生一个错误
O_NOBLOCK 以非阻塞的方式打开一个文件
O_TRUNC 如果文件已经存在,则删除文件的内容
int open(const char *pathname,int flag,mode_t mode)
当flag为O_CREATE,指定mode标志,用来表示文件的访问权限
S_IRUSR 用户可以读
S_IWUSR 用户可以写
S_IXUSR 用户可以执行
S_IRWXU 用户可以读、写、执行
S_IRGRP 组可以读
S_IWGRP 组可以写
S_IXGRP 组可以执行
S_IRWXG 组可以读、写、执行
S_IROTH 其他人可以读
S_IWOTH 其他人可以写
S_IXOTH 其他人可以执行
S_IRWXO 其他人可以读、写、执行
S_ISUID 设置用户的执行ID
S_ISGID 设置组的执行ID
mode标志也可以用数字来表示文件权限:
每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。
第一位表示设置用户ID
第二位表示设置组ID
第三位表示用户自己的权限位
第四位表示组的权限
第五位表示其他人的权限
open("test", O_CREAT, 10705);
上述语句等价于:
open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );
读写
int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);
评论列表()