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
浙公网安备 33010602011771号