[英]error when writing to file after opening it with O_APPEND | O_CREATE
我在 O_APPEND 中打开了一个名为“pranav”的文本文件 | O_CREAT 模式如下图:
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main()
{
//FILE Descriptor fdes
/*Open file pranav.txt in write-only mode,
O_CREAT creates file if it does not exist*/
int fdes = open("pranav.txt",O_APPEND | O_CREAT );
//Error returns -1
if(fdes!=-1)
{
//To write on file
if((write(fdes,"Pranav",6))== -1)
write(2,"File_Writing_Error",18);
//To print on screen
else
write(1,"Done",4);
}
else
{
//Print "error" on screen
write(2,"File_Opening_Error",18);
}
close(fdes);
}
在 O_APPEND 模式下,它执行 write(2,"File_Writing_Error",18); 语句,因此无法在文件上写入“Pranav”,但是如果我使用 O_WRONLY 模式,则不会发生此错误并且程序成功运行
open
文档说,您必须提供O_RDONLY
、 O_WRONLY
和O_RDWR
标志O_RDONLY
,并且您可以使用其他标志(如O_APPEND
和O_CREAT
任意组合。
除了O_APPEND
和O_CREAT
之外,您没有提供O_WRONLY
。 我的猜测是O_RDONLY
是 0,因此当不提供访问标志之一时,您最终会得到O_RDONLY
,因此无法写入文件。
所以正确的代码应该是:
mode_t mode = S_IRWXU | SIRWXG; // or any other mode
int fdes = open("pranav.txt", O_APPEND | O_CREAT | O_WRONLY, mode);
请注意如果标志包含O_CREAT
或O_TMPFILE
所需的附加参数mode
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.