将权限设置为 777,生成的文件为 775
Setting permissions to 777, resulting file is 775
我正在尝试将字符串写入文件,并将文件的权限设置为 777。生成的文件是空白的,权限为 775。模式掩码似乎是正确的,当我检查访问时( ),它 returns 0。我可以将文件修改为 777(不使用 sudo)。怎么回事?
运行 ubuntu 14.10。硬盘是ext3/4.
if (argc == 1) {
int fd = open ("sampleFile", O_CREAT , S_IRWXU | S_IRWXG | S_IRWXO);
int writ = 0xDEADBEEF;
if (fd != -1) {
char str [] = "My permission should be set to 777.";
writ = write (fd, &str, (int)strlen (str));
//writ = access ("sampleFile", W_OK);
close (fd);
printf ("(%o) %s\n", writ, str);
return 0;
}
else {
printf ("Couldn't make sampleFile in pwd.\n");
return 1;
}
}
你有两个问题:
write()
的第二个参数"must include one of the following access modes: O_RDONLY
, O_WRONLY
, or O_RDWR
"。将 O_CREAT
更改为 O_CREAT | O_WRONLY
以允许写入文件。
创建文件的模式被您修改umask
。你的 umask
可能是 002
。 (002
的 umask
可以防止你不小心创建了世界可写文件。)你可以在创建后使用 fchmod
来更改权限。:
fchmod(fd, S_IRWXU | S_IRWXG | S_IRWXO)
我正在尝试将字符串写入文件,并将文件的权限设置为 777。生成的文件是空白的,权限为 775。模式掩码似乎是正确的,当我检查访问时( ),它 returns 0。我可以将文件修改为 777(不使用 sudo)。怎么回事?
运行 ubuntu 14.10。硬盘是ext3/4.
if (argc == 1) {
int fd = open ("sampleFile", O_CREAT , S_IRWXU | S_IRWXG | S_IRWXO);
int writ = 0xDEADBEEF;
if (fd != -1) {
char str [] = "My permission should be set to 777.";
writ = write (fd, &str, (int)strlen (str));
//writ = access ("sampleFile", W_OK);
close (fd);
printf ("(%o) %s\n", writ, str);
return 0;
}
else {
printf ("Couldn't make sampleFile in pwd.\n");
return 1;
}
}
你有两个问题:
write()
的第二个参数"must include one of the following access modes:O_RDONLY
,O_WRONLY
, orO_RDWR
"。将O_CREAT
更改为O_CREAT | O_WRONLY
以允许写入文件。创建文件的模式被您修改
umask
。你的umask
可能是002
。 (002
的umask
可以防止你不小心创建了世界可写文件。)你可以在创建后使用fchmod
来更改权限。:fchmod(fd, S_IRWXU | S_IRWXG | S_IRWXO)