【发布时间】:2017-09-14 17:04:30
【问题描述】:
几周前我做了一个小项目,但最近不知何故不再起作用(或者至少不像以前那样起作用)。
它必须用open() 创建一个文件,并用一些内容填充它。
[...]
int fd=open(filename, O_RDWR | O_CREAT);
/* write content */
close(fd);
[...]
问题只是它最近没有创建具有正确权限的文件(它是在问题发生时使用0110 创建的)
我现在知道我只需要像这样指定权限:
int fd=open(filename, O_RDWR | O_CREAT, 0700); /* (for instance) */
但是该项目仍然可以在某些计算机上运行(在 OSX 上无法运行,但可以在 Linux 上运行,它是使用 0640 创建的,所以它仍然可以运行,因为我仍然具有读取权限)。
所以这是我的问题:
- 在创建文件时如何为
open()函数定义这些默认权限?
(如果我没有明确地将它作为参数传递给我的open() 调用。)
【问题讨论】:
-
你的手册页告诉你什么?
-
“[
mode] 参数必须在标志中指定O_CREAT时提供”。 (强调我的)当你不这样做时,这听起来像是未定义的行为,当我省略它时,我确实会得到垃圾(--wS--S--T)。 -
@ikegami 这种未定义的行为可能会导致类似this。
-
未定义行为的一个奇妙之处在于,有时它看起来会起作用,而在其他时候却不会。
-
@WumpusQ.Wumbley 确实如此。我的错,我弄乱了我的复制粘贴,我编辑了我的帖子。感谢您提请我注意。
标签: c file-permissions