gpt4 book ai didi

c - 写入文件时出现 "Permission denied"错误,但前提是该文件尚不存在

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:58 26 4
gpt4 key购买 nike

我通常不喜欢问“我的代码有什么问题”的问题,但这是我最后的希望。

我正在做一个必须写入文件的项目,我正在尝试使用系统调用 (Linux) 来完成它。所以我使用 unistd.h,它提供以下功能:int open( char* filename, int flags, int mode )int write( int fd , void* ptr, int numbytes )。我一直使用 write 没有问题,但这通常与标准输出和标准错误文件描述符有关。

所以我使用这段代码打开文件:

int flags = O_WRONLY;
if( !exists( "testfile2.txt" ) ) {
flags |= O_CREAT;
}
int mode = S_IROTH | S_IWOTH | S_IXOTH;
int filedesc = open( "testfile2.txt", flags, mode );

然后这一行写入文件:

int written = write(filedesc, "abcdefghijklmnopqrstuvwxyz",
strlen("abcdefghijklmnopqrstuvwxyz" ) );

最后,我用这个关闭文件:

int closed = close( filedesc );

问题是,当我尝试写入不存在的文件时,我收到一条消息说“权限被拒绝”。当我在 vi 中打开它并忽略权限时,该文件似乎是空的。但是,如果该文件最初存在,它会写入它,我可以很好地读取它。有谁知道出了什么问题或者我是否遗漏了什么?

提前致谢。

最佳答案

根据docs , O_CREAT 仅在文件不存在时才使用权限位。您传递了 007 的权限掩码,拒绝了“所有者”和“组”对该文件的所有权限。至少使用 S_IRUSR |模式标志中的 S_IWUSR:

x@y:~/tmp$ touch test
x@y:~/tmp$ cat test
x@y:~/tmp$ chmod 007 test
x@y:~/tmp$ cat test
cat: test: Permission denied

关于c - 写入文件时出现 "Permission denied"错误,但前提是该文件尚不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com