Linxu中的系统调用函数---open函数(详解)

Isadora ·
更新时间:2024-11-13
· 754 次阅读

下面是man手册的章节号
在这里插入图片描述
我们可以通过man手册来查询系统函数man 2 open

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


作者:翻身的咸鱼ing



调用函数 open 调用 函数 open函数 系统 系统调用

需要 登录 后方可回复, 如果你还没有账号请 注册新账号