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

时间:2014-01-16 07:31:31

标签: 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);
       }

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

1 个答案:

答案 0 :(得分:6)

open的文档说,您必须准确提供其中一个标记O_RDONLYO_WRONLYO_RDWR,并且您可以使用其他标记的任意组合,例如{{1} }和O_APPEND

O_CREATO_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