打开功能中的模式位是什么意思?

问题描述 投票:0回答:1

在此标题/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 */
...
  1. opening modesetting flag有什么区别?模式是O_*和标志S_*,但是都可以在open(2)方法中进行写/只读操作。
  2. O_ACCMODE 00000003是哪种数字系统,是八进制的,所以它的值可以在0-7之间?那么最大数是77777777? (我是初学者)
  3. 最后一个-我可以在文件的特定访问权限中使用自定义标志/模式吗?第一个标志O_ACCMODE不在open(2)的文档中(为什么),这意味着我不能在该方法中使用它?

提前感谢。

c linux header-files
1个回答
0
投票

打开模式和设置标志有什么区别?模式是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,因此该文件没有记录在其中。

© www.soinside.com 2019 - 2024. All rights reserved.