我正在开发一个需要存储一些信息的程序,我决定使用一个简单的文件。
当程序启动时,它会执行以下代码,如果文件存在,则会导致文件以附加模式打开,如果文件不存在则会创建 (程序第一次加载时应该在下次创建它时只需要使用相同的文件)
if((fd = open(path, O_APPEND|O_CREAT|O_RDWR, 666)) < 0)
{
perror("Database open failed");
}
else if(chmod(path, 666) < 0)
{
perror("Database set permissions failed");
}
else if((stream = fdopen(fd, "a+")) == NULL)
{
perror("Database get stream failed");
}
当文件不存在时,它已成功创建,程序运行正常。但是当文件已经存在时,它会说“#34; Permission denied&#34;即使它是创建该文件的同一用户下的相同程序。
更多细节:
谢谢!
答案 0 :(得分:2)
open()
的模式必须是八进制,即666
应为0666
。
使用模式的符号常量更好。
答案 1 :(得分:1)
根据open()
的{{3}},({部分}} mode
字段所需的值
S_IRWXU
<00> 00700用户(文件所有者)具有读,写和执行权限S_IRUSR
<00> 00400用户具有读取权限S_IWUSR 00200用户具有写入权限S_IXUSR
00100用户具有执行权限
等等。
所以,我们可以清楚地看到,符号是 octal 。您需要使用0666
来表示八进制表示法。