下面是man手册的章节号
我们可以通过man手册来查询系统函数man 2 open
//头文件:
#include
#include
#include
//功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文 件描述符对指定文件进行读取与写入的操作。)
原型
int open(const char*pathname,int flags); //文件存在
int open(const char*pathname,int flags,mode_t mode);//文件不存在
参数说明:
1.pathname
要打开或创建的目标文件
2.flags
打开文件时,可以传入多个参数选项,用下面的
一个或者多个常量进行“或”运算,构成falgs
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开
这三个常量,必须指定一个且只能指定一个,面的参数是可选的。
O_CREAT: 若文件不存在,则创建它,需要使
用mode选项。来指明新文件的访问权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所
写的数据附加到文件的末尾而不覆盖原来的内容
3.mode
用来设置创建文件的权限(rwx)。当flags中带有O_CREAT时才有效。
标志 说明 标志 说明 标志 说明
S_IRUSR 文件属主可读 S_IRGRP 文件所在组可读 S_IROTH 其他用户可读
S_IWUSR 文件属主可写 S_IWGRP 文件所在组可写 S_IWOTH 其他用户可写
S_IXUSR 文件属主可执行 S_IWOTH 文件所在组可执行 S_IXOTH 其他用户可执行
4.返回值:
调用成功时返回一个文件描述符fd
调用失败时返回-1,并修改errno
举例:
#include
#include
#include
#include
#include
#include
int main(){
int fd;
//hello.c已存在
fd = open("hello.c",O_RDWR);
if(fd == -1){
perror("open file");
exit(1);
}
close(fd);
}
#include
#include
#include
#include
#include
#include
int main(){
int fd;
//myhello.c文件不存在 权限777
fd = open("myhello.c",O_RDWR | O_CREAT,0777);
if(fd == -1){
perror("open file");
exit(1);
}
close(fd);
}
在open的参数中若文件不存在,创建文件是的权限并不是文件实际的权限,还需与本地掩码结合。以上myhello.c为例:
创建文件时权限是777,实际是
文件的实际权限 = 给定权限 & 本地掩码(取反)
本地掩码:查看命令umask
则上面myhello.c实际文件权限 = (111111111) & (~(000010010)) = 111101101
参考:https://blog.csdn.net/dangzhangjing97/article/details/79631173