如何用相同的模式和标志打开fdopen?

Elf*_*yer 5 c file-io printf fdopen

我想要一个FILE*类型使用fprintf.我需要用来fdopen获得一个FILE*而不是open那个返回一个int.但是,我们可以做同样的fdopenopen?(我从未使用过fdopen)

我想这样做fdopen:

open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
Run Code Online (Sandbox Code Playgroud)

Bla*_*iev 9

fdopen获取之前可以返回的文件描述符open,因此这不是问题.

只是open你的文件获取描述符,然后fdopen是描述符.

fdopen简单地创建一个用户空间缓冲的流,采用支持readwrite操作的任何类型的描述符.

  • 不要忘记`fdopen`的模式必须与文件描述符模式兼容. (3认同)

Gri*_*han 8

fdopen()使用文件描述符来文件指针:

fdopen()函数将流与文件描述符相关联.文件描述符是从获得open(),dup(),creat(),或者pipe(),它打开的文件,但不返回指向一个FILE结构流.Streams是几乎所有stdio库例程的必要输入.

FILE* fp = fdopen(fd, "w");
Run Code Online (Sandbox Code Playgroud)

此示例代码可以帮助您更多地使用fprintf():

int main(){
 int fd;
 FILE *fp;
 fd = open("my_file",O_WRONLY | O_CREAT | O_TRUNC);
  if(fd<0){
    printf("open call fail");
    return -1;
 }
 fp=fdopen(fd,"w");
 fprintf(fp,"we got file pointer fp bu using File descriptor fd");
 fclose(fp);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意:

  • 在使用`fdopen`然后使用`fclose`之后,你应该*不*关闭文件描述符.`fd`是*不*重复,调用`fclose`将关闭它. (3认同)