在此标题/usr/src/linux-headers-5.0.0-38/include/uapi/asm-generic/fcntl.h
中,我发现以下定义:
#define O_ACCMODE 00000003
#define O_RDONLY 00000000
#define O_WRONLY 00000001
#define O_RDWR 00000002
#ifndef O_CREAT
#define O_CREAT 00000100 /* not fcntl */
...
opening mode
和setting flag
有什么区别?模式是O_*
和标志S_*
,但是都可以在open(2)方法中进行写/只读操作。O_ACCMODE 00000003
是哪种数字系统,是八进制的,所以它的值可以在0-7
之间?那么最大数是77777777
? (我是初学者)O_ACCMODE
不在open(2)的文档中(为什么),这意味着我不能在该方法中使用它?提前感谢。
打开模式和设置标志有什么区别?模式是
O_*
和标志S_*
,但是都可以在open(2)方法中进行写/只读操作。
手册页对此进行了解释:O_*
常数进入flags
参数(有一些限制),S_*
常数进入mode
参数(仅在某些情况下使用,例如传递O_CREAT
等时使用。 )。
最好在理解内核或libc代码之前研究手册页和不同的标准。
O_ACCMODE 00000003
是哪种数字系统,八进制吗,所以它的值可以在0-7之间,那么最大数字是77777777
?
是,以0
开头的数字后跟八进制。这是由C标准定义的。
最大的整数将是C中的INT_MAX
。尽管使用open
时不需要这样做。
我可以在文件的特定访问中设置我的自定义标志/模式吗?
不,您不应该定制。
第一个标志
O_ACCMODE
不在open(2)的文档中(为什么),这意味着我不能在该方法中使用它?
该标志由POSIX定义,是用于检索访问模式的掩码。您不应该将其传递给open
,因此该文件没有记录在其中。