C语言 open函数说明

前言全局说明

C语言 open函数说明


一、说明


二、函数原型

2.1

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

2.2

文件名:


三、使用示例

3.1 示例1

fd=open(文件名,O_RDONLY|O_CREAT,0755)

3.2 示例2

fd=open(argv[1],O_CREAT|O_RDWR,0755)

使用 | 竖线或,来匹配多个模式


四、速查表格

4.1 flags 参数说明

The full list of file creation flags and file status flags is as follows:

常量 权限 说明 备注
O_RDONLY 以只读方式打开文件。
O_WRONLY 以只写方式打开文件。
O_RDWR 以可读写方式打开文件。

上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。

常量 权限 说明 备注
O_APPEND 每次写操作都写入文件的末尾
O_ASYNC
O_CLOEXEC (since Linux 2.6.23)
O_CREAT 若欲打开的文件不存在,则自动建立该文件。
O_DIRECT (since Linux 2.4.10)
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。
O_DSYNC
O_EXCL
O_LARGEFILE
O_NOATIME (since Linux 2.6.8)
O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
O_NONBLOCK or O_NDELAY 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_PATH (since Linux 2.6.39)
O_SYNC 以同步的方式打开文件。
O_TMPFILE (since Linux 3.11)
O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的 资料也会消失。

4.2 mode 参数说明

O_CREAT

常量 权限 中文说明 原文说明 备注
S_IRWXU 00700 user (file owner) has read, write, and execute permission
S_IRUSR or S_IREAD 00400 使用者(拥有者)能够读这个文件 user has read permission
S_IWUSR 00200 使用者(拥有者)能够写这个文件 user has write permission
S_IXUSR 00100 使用者(拥有者)能够执行这个文件 user has execute permission
S_IRWXG 00070 group has read, write, and execute permission
S_IRGRP 00040 拥有者所在组的成员能够读这个文件 group has read permission
S_IWGRP 00020 拥有者所在组的成员能够写这个文件 group has write permission
S_IXGRP 00010 拥有者所在组的成员能够执行这个文件 group has execute permission
S_IRWXO 00007 others have read, write, and execute permission
S_IROTH 00004 其他人(任何人)能够读这个文件 others have read permission
S_IWOTH 00002 其他人(任何人)能够写这个文件 others have write permission
S_IXOTH 00001 其他人(任何人)能够执行这个文件 others have execute permission
S_ISUID 0004000 set-user-ID bit
S_ISGID 0002000 set-group-ID bit (see inode(7)).
S_ISVTX 0001000 sticky bit (see inode(7)).

4.3 错误返回值

RETURN VALUE

open(), openat(), and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).

ERRORS

常量 中文说明 原文说明 备注
EACCES 参数pathname所指的文件不符合所要求测试的权限。
EDQUOT
EEXIST 参数pathname 所指的文件已存在,却使用了O_CREAT和O_EXCL旗标。
EFAULT 参数pathname指针超出可存取内存空间。
EFBIG
EINTR
EINVAL 参数mode 不正确。
EISDIR
ELOOP 参数pathname有过多符号连接问题。
EMFILE
ENAMETOOLONG 参数pathname太长。
ENFILE
ENODEV
ENOENT
ENOMEM 核心内存不足。
ENOSPC
ENOTDIR 参数pathname不是目录。
ENXIO
EOPNOTSUPP
EOVERFLOW
EPERM
EROFS 欲测试写入权限的文件存在于只读文件系统内。
ETXTBSY
EWOULDBLOCK
EBADF
EIO I/O 存取错误。


免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://blog.csdn.net/zjhkobe/article/details/6633435
https://blog.csdn.net/zhizhengguan/article/details/111693888
https://www.cnblogs.com/eastnapoleon/p/3309917.html



posted @   悟透  阅读(587)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-06-26 read: arg count
点击右上角即可分享
微信分享提示