无效参数

fdopen: Invalid arguement

本文关键字:参数 无效      更新时间:2023-10-16

我试图创建和打开一个文件与fopenfdopen写一些内容。下面是我写的代码:

    char Path[100];
    int write_fd;
    snprintf(Path,100,"%s/%s","/home/user","myfile.txt");
    printf("opening file..n");
    write_fd = open(Path, O_WRONLY | O_CREAT | O_EXCL, 0777);
    if(write_fd!=-1)
    { 
       printf(" write_fd!=-1n");
       FILE *file_fp = fdopen(write_fd,"a+");
       if (file_fp == NULL)
       {
              printf("Could not open file.File pointer error %sn", std::strerror(errno));
              close(write_fd);
               return 0;         
       }
       write(write_fd, "Firstn", 7);
       write(write_fd, "Secondn", 8);
       write(write_fd, "Thirdn", 7);
       fclose(file_fp);
   }

文件fd write_fd创建的权限为"错误",应该有读写权限。但是当fdopen调用模式为a+的文件描述符时,它抛出错误:无效参数。

以模式a成功打开。

模式aa+到底有什么不同导致这个错误?

a+模式意味着追加读取

由于您最初以只写模式(O_WRONLY | O_CREAT | O_EXCL)打开文件,因此读访问与初始描述符的模式不兼容。

因此,对fdopen()的调用在EINVAL中理所当然地失败了。