几个星期前我做了一个小项目,但它最近不再起作用了(至少,不像以前那样有效)。
必须使用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()
电话。)
答案 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来限制事物。