我在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模式,则不会发生此错误并且程序成功运行
答案 0 :(得分:6)
open的文档说,您必须准确提供其中一个标记O_RDONLY
,O_WRONLY
和O_RDWR
,并且您可以使用其他标记的任意组合,例如{{1} }和O_APPEND
。
除O_CREAT
和O_WRONLY
之外,您未提供O_APPEND
。我的猜测是O_CREAT
为0,所以如果不给出其中一个访问标记,你最终会得到O_RDONLY
,因此无法写入文件。
所以正确的代码应该是:
O_RDONLY
如果标记包含mode_t mode = S_IRWXU | SIRWXG; // or any other mode
int fdes = open("pranav.txt", O_APPEND | O_CREAT | O_WRONLY, mode);
或mode
,请注意附加参数O_CREAT
。