什么是文件创建时的`open()`默认权限?

时间:2017-04-18 18:03:47

标签: c file-permissions

几个星期前我做了一个小项目,但它最近不再起作用了(至少,不像以前那样有效)。

必须使用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()电话。)

2 个答案:

答案 0 :(得分:4)

没有默认值。使用UPDATE custInfo SET contractGallons = (contractGallons - (SELECT gallons from addFill where customerName='Strathman, Tim')) WHERE customerName = 'Strathman, Tim' 时必须指定它们。

根据我系统上的文档,

  在标志中指定O_CREAT时,

[{1}}]参数必须提供

(强调我的)

当你不这样做时,这听起来就像它未定义的行为,当我省略它时我确实会得到垃圾(mode)。

答案 1 :(得分:0)

您需要将模式参数指定为包含一组位标志的整数。类似的东西:

 int fd=open(filename, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG); 

请参阅chmod的手册页。该调用还使用进程umask来限制事物。