O_APPEND打开文件后写入文件时出错 O_CREATE

Pra*_*sht 1 c operating-system

我已经在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);
       }
Run Code Online (Sandbox Code Playgroud)

在O_APPEND模式下,它执行write(2,“ File_Writing_Error”,18); 语句,因此无法在文件上写入“ Pranav”,但是如果我使用O_WRONLY模式,则不会发生此错误并且程序可以成功运行

Wer*_*nze 6

open文档说,您必须准确给出其中一个标志O_RDONLYO_WRONLY并且O_RDWR可以使用其他标志(例如O_APPEND和)的任意组合O_CREAT

您没有提供O_WRONLY除了O_APPENDO_CREAT。我的猜测是O_RDONLY0,因此当不给出访问标志之一时,您最终将O_RDONLY无法写入文件。

因此正确的代码应为:

mode_t mode = S_IRWXU | SIRWXG;  // or any other mode
int fdes = open("pranav.txt", O_APPEND | O_CREAT | O_WRONLY, mode);
Run Code Online (Sandbox Code Playgroud)

请注意mode如果标记包括O_CREAT或,则需要附加参数O_TMPFILE