访问我使用同一个应用程序

时间:2015-04-23 13:40:32

标签: c linux file permissions

我正在开发一个需要存储一些信息的程序,我决定使用一个简单的文件。

当程序启动时,它会执行以下代码,如果文件存在,则会导致文件以附加模式打开,如果文件不存在则会创建 (程序第一次加载时应该在下次创建它时只需要使用相同的文件)

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;即使它是创建该文件的同一用户下的相同程序。

更多细节:

  • 我使用的是Ubuntu 12.04 LTS
  • 当我使用&#34; ls -l&#34;该文件的权限是:&#34; - w - wx-wT&#34;
  • 使用666解决方案从终端进行chmod-ing发布
  • chmod() - 在代码中没有任何帮助

谢谢!

2 个答案:

答案 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来表示八进制表示法。