fdopen:无效的争论

Sri*_*nth 0 c++ file-io

我正在尝试创建和打开一个文件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!=-1\n");

       FILE *file_fp = fdopen(write_fd,"a+");

       if (file_fp == NULL)
       {
              printf("Could not open file.File pointer error %s\n", std::strerror(errno));
              close(write_fd);
               return 0;         
       }
       write(write_fd, "First\n", 7);
       write(write_fd, "Second\n", 8);
       write(write_fd, "Third\n", 7);
       fclose(file_fp);
   }
Run Code Online (Sandbox Code Playgroud)

文件 fdwrite_fd是使用 WRONGLY 权限创建的,该权限应该具有读/写(?)的权限。但是当fdopen使用 mode 调用文件描述符时a+,它会抛出错误,说无效参数。

它以 mode 成功打开a

模式之间究竟有何不同aa+导致此错误?

Fré*_*idi 5

a+模式意味着appendread

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

因此,对fdopen()的调用正确地失败了EINVAL