访问我使用同一应用程序创建的文件时 Linux 中的权限被拒绝
Permission denied in Linux when accessing a file I created using the same app
我正在开发一个需要存储一些信息的程序,我决定为其使用一个简单的文件。
程序启动时会执行以下代码,如果文件存在则以附加模式打开文件,如果不存在则创建文件
(第一次加载程序时,它应该在下次加载时创建它,它只需要使用相同的文件)
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");
}
当文件不存在时,创建成功,程序运行正常。但是当文件已经存在时,它会显示 "Permission denied",即使它是创建该文件的同一用户下的同一程序。
更多细节:
- 我正在使用 Ubuntu 12.04 LTS
- 当我使用 "ls -l" 检查文件的权限时:“--w--wx-wT”
- 使用 666 从终端进行 chmod 解决问题
- 代码中的 chmod()-ing 根本没有帮助
谢谢!
open()
的模式需要是八进制,即 666
应该是 0666
。
最好使用模式的符号常量。
根据 open()
的 man page,mode
字段的(部分)所需值为
S_IRWXU
00700 user (file owner) has read, write and execute permission
S_IRUSR
00400 user has read permission S_IWUSR 00200 user has write permission
S_IXUSR
00100 user has execute permission
等等。
所以,我们可以清楚地看到,表示法是八进制。您需要使用 0666
表示八进制表示法。
我正在开发一个需要存储一些信息的程序,我决定为其使用一个简单的文件。
程序启动时会执行以下代码,如果文件存在则以附加模式打开文件,如果不存在则创建文件 (第一次加载程序时,它应该在下次加载时创建它,它只需要使用相同的文件)
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");
}
当文件不存在时,创建成功,程序运行正常。但是当文件已经存在时,它会显示 "Permission denied",即使它是创建该文件的同一用户下的同一程序。
更多细节:
- 我正在使用 Ubuntu 12.04 LTS
- 当我使用 "ls -l" 检查文件的权限时:“--w--wx-wT”
- 使用 666 从终端进行 chmod 解决问题
- 代码中的 chmod()-ing 根本没有帮助
谢谢!
open()
的模式需要是八进制,即 666
应该是 0666
。
最好使用模式的符号常量。
根据 open()
的 man page,mode
字段的(部分)所需值为
S_IRWXU
00700 user (file owner) has read, write and execute permission
S_IRUSR
00400 user has read permission S_IWUSR 00200 user has write permission
S_IXUSR
00100 user has execute permission
等等。
所以,我们可以清楚地看到,表示法是八进制。您需要使用 0666
表示八进制表示法。