访问我使用相同的应用程序创build的文件时,Linux中的权限被拒绝

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

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

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"); } 

当文件不存在时,它被创build成功,程序运行正常。 但是,当文件已经存在时,它说“权限被拒绝”,即使它是创build该文件的同一用户下的相同程序。

一些更多细节:

  • 我正在使用Ubuntu 12.04 LTS
  • 当我使用“ls -l”检查时,文件的权限是:“ – w – wx-wT”
  • 从666解决terminal的问题
  • chmod()在代码中根本没有帮助

谢谢!

根据open()的手册页 , mode字段所需的(一些)值是

S_IRWXU

00700用户(文件所有者)具有读取,写入和执行权限

S_IRUSR

00400用户具有读取权限S_IWUSR 00200用户具有写入权限

S_IXUSR

00100用户有执行权限

等等。

所以,我们可以清楚地看到,符号是八进制的 。 您需要使用0666来表示八进制符号。

open()的模式需要是八进制的,即666应该是0666

最好使用模式的符号常量。