繁体   English   中英

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

[英]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_RDONLYO_WRONLYO_RDWR标志O_RDONLY ,并且您可以使用其他标志(如O_APPENDO_CREAT任意组合。

除了O_APPENDO_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_CREATO_TMPFILE所需的附加参数mode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM