使用O|u APPEND | O|u CREATE打开文件后写入文件时出错
我在O|u APPEND | O|u create模式下打开了一个名为“pranav”的文本文件,如下所示:使用O|u APPEND | O|u CREATE打开文件后写入文件时出错,c,operating-system,C,Operating System,我在O|u APPEND | O|u create模式下打开了一个名为“pranav”的文本文件,如下所示: #include<unistd.h> #include<fcntl.h> #include<stdio.h> main() { //FILE Descriptor fdes /*Open file pranav.txt in write-only mode, O_CREA
#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);
}
#包括
#包括
#包括
main()
{
//文件描述符
/*以只写模式打开文件pranav.txt,
O_create创建不存在的文件*/
int fdes=open(“pranav.txt”,O|u APPEND | O|u CREAT);
//错误返回-1
如果(fdes!=-1)
{
//存档
如果((写入(fdes,“Pranav”,6))=-1)
写入(2,“文件写入错误”,18);
//在屏幕上打印
其他的
写(1,“完成”,4);
}
其他的
{
//在屏幕上打印“错误”
写入(2,“文件打开错误”,18);
}
关闭(fdes);
}
在O_追加模式下执行写入(2,“文件写入错误”,18);语句,因此无法在文件中写入“Pranav”,但如果我使用O_WRONLY模式,则不会发生此错误,并且程序会成功运行。
open
的文档说,您必须只给出一个标志O_RDONLY
,O_WRONLY
和O_RDWR
,您可以使用其他标志的任意组合,如O_APPEND
和O_create
除了O_APPEND
和O_create
之外,您没有提供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_create
或O_TMPFILE
,open
的文档中规定,您必须只给出一个标志O_RDONLY
,则需要附加参数mode
,O_WRONLY
和O_RDWR
,您可以使用其他标志的任意组合,如O_APPEND
和O_create
除了O_APPEND
和O_create
之外,您没有提供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);
请注意附加参数
mode
,如果标志包括O_create
或O_TMPFILE
使用perror
()打印实际错误消息使用perror()
函数了解错误谢谢您增加我的知识。它打印了错误:“坏文件描述符”使用perror
()打印真正的错误消息使用perror()
函数了解错误谢谢您增加了我的知识。它大量打印错误:“错误的文件描述符”。我以前认为O_APPEND是O_WRONLY的替代品,现在我知道它可以与O_WRONLYThanx结合使用。我以前认为O_APPEND是O_WRONLY的替代品,现在我知道它可以与O_WRONLY一起使用