几个星期前我做了一个小项目,但最近不知何故(或者至少不像之前的工作)。什么是创建文件时的`open()`默认权限?
它必须创建一个文件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()
作为参数。)
你的手册页告诉你什么? – Jens
“[在标志中指定'O_CREAT'时,必须提供''mode']参数*。 (强调我的)这使得它听起来像是不确定的行为,而当我忽略它时('--wS - S - T'),我确实会变成垃圾。 – ikegami
@ikegami而这种未定义的行为可能会导致类似[this](http://stackoverflow.com/q/2245193/6850771)。 –