我正在尝试使用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);
   }


文件fd write_fd是使用错误权限创建的,该权限应该具有读/写(?)权限。但是,当fdopen在模式为a+的文件描述符上调用时,会抛出错误,提示“无效参数”。

它已在模式a下成功打开。

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

最佳答案

a+模式表示追加和读取。

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

因此,以EINVAL正确调用fdopen()失败。

关于c++ - fopen:无效的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30476983/

10-09 18:28