为什么等效代码的开放系统调用模式值不同?
Why are the open system call mode values different for equivalent code?
下面的代码和引用的语句来自Linux System Programming by Robert Love
。
我不明白第一个和第二个代码示例中的模式如何相同。
从第一个例子开始,我计算出众数为
USR -> 2+1 = 3
GRP -> 2+1 = 3
OTH -> 1 = 1
所以我的期望是 0331,但书上说是 0664。
我的逻辑有什么问题?
从下面的书中复制:
int fd;
fd = open (file, O_WRONLY | O_CREAT | O_TRUNC, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);
if(fd == -1)
/* error */
Trading portability (in theory at least) for readability, we could
have written the following, to identical effect:
int fd;
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0664);
if(fd == -1)
/*error*/
无论出于何种原因,您选择使用错误的常量值。
- 而不是 S_IRUSR 是
0400
,你决定它是 0200
。
- 而不是 S_IWUSR 是
0200
,你决定它是 0100
。
- 等等
如果您使用正确的常量值,您将得到相同的结果。
下面的代码和引用的语句来自Linux System Programming by Robert Love
。
我不明白第一个和第二个代码示例中的模式如何相同。
从第一个例子开始,我计算出众数为
USR -> 2+1 = 3
GRP -> 2+1 = 3
OTH -> 1 = 1
所以我的期望是 0331,但书上说是 0664。
我的逻辑有什么问题?
从下面的书中复制:
int fd;
fd = open (file, O_WRONLY | O_CREAT | O_TRUNC, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);
if(fd == -1)
/* error */
Trading portability (in theory at least) for readability, we could have written the following, to identical effect:
int fd;
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0664);
if(fd == -1)
/*error*/
无论出于何种原因,您选择使用错误的常量值。
- 而不是 S_IRUSR 是
0400
,你决定它是0200
。 - 而不是 S_IWUSR 是
0200
,你决定它是0100
。 - 等等
如果您使用正确的常量值,您将得到相同的结果。