【发布时间】:2020-09-06 15:09:39
【问题描述】:
我正在尝试了解文件描述符的标志和模式。
fcntl - manipulate file descriptor
int fcntl(int fd, int cmd);
状态:
文件描述符标志
以下命令操作与文件关联的标志 描述符。目前,只定义了一个这样的标志:FD_CLOEXEC,...
文件状态标志
每个打开的文件描述都有某些相关的状态标志, 由 open(2) 初始化... 文件状态标志及其语义在open(2) 中进行了描述。
鉴于fcntl 完全是指文件描述符(不处理流),我猜第二个标题应该是“文件描述符状态标志”。
所以现在我们有一个 FD "flags" 和 "status flags"。
该手册页还提到当cmd=F_GETFL 时,fcntl 的返回值为“文件访问模式和文件状态标志”。
所以现在我们还有一个文件访问模式。
现在在man page for open
有 flags 和 modes,好像它们是两个不同的项目。
甚至还有一个原型可以明确区分
int open(const char *pathname, int flags, mode_t mode);
所以现在我们有,对于每个文件描述符,“flags”、“status flags”、“文件访问模式”和“modes”(我认为后两者相同)。
首先,
1。我不知道这三个类别的区别。
遍历两个引用的手册页,我收集了一个“实体”列表(下面,按照出现的顺序,有些是重复的)。
2。我不知道每个属于哪个类别。
FD_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, O_NONBLOCK, O_DSYNC, O_SYNC, O_CLOEXEC
O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TMPFILE, O_TRUNC, O_LARGEFILE, O_NDELAY, O_PATH
我找不到一个简单的列表来说明“X、Y、Z 是标志,W、V 是模式等。” 也许它们是可以互换使用的术语,或者 mode 是 flags 的子集,或者...
相关:
Difference between "file pointer", "stream", "file descriptor" and ... "file"?(回答可能在当前的 OP 中有一个指南,即使不一样)。
How to make sense of O_RDONLY = 0?
Difference between "file pointer", "stream", "file descriptor" and ... "file"?
How to get the mode of a file descriptor?
https://www.gnu.org/software/libc/manual/html_node/Access-Modes.html
https://www.gnu.org/software/libc/manual/html_node/File-Status-Flags.html#File-Status-Flags
【问题讨论】:
标签: file-descriptor file-access