如何将文件指针(FILE*fp)转换为文件描述符(int fd)?

Phi*_*ler 164 c unix linux posix file

我有一个FILE *,通过电话回来fopen().我需要从中获取文件描述符,以便进行调用fsync(fd).从文件指针获取文件描述符的功能是什么?

Phi*_*ler 202

适当的功能是int fileno(FILE *stream).它可以在<stdio.h>POSIX标准中找到,但不是标准C.

  • 访问标准C库中的函数确实需要包含头文件,至少如果编译器需要原型(我永远不会记住在这方面实际上是标准行为).如果没有标题,则不会在C文件的开头定义任何名称. (19认同)
  • 这是一个很好的答案,但值得注意的是,这不是标准的c函数,它是posix函数. (8认同)
  • 它不在C标准中,因为文件描述符是UNIX的东西(在Linux上,它是open(2),不是open(3)). (5认同)
  • 严格地说,如果函数确实是标准C库的一部分,则不需要提及任何头或库.但是,它不是标准的,这就是至少提到标题可能有意义的原因. (4认同)

Mar*_*tos 38

即使fileno(FILE *)可能返回文件描述符,也要小心不要绕过stdio的缓冲区.如果存在缓冲区数据(读取或未刷新写入),则从文件描述符读取/写入可能会产生意外结果.

要回答其中一个问题,要将文件描述符转换为FILE指针,请使用 fdopen(3)

  • 非常重要的评论需要作为答案提出。很大一部分评论都是像你这样的尖刻、毫无意义的元评论……还有这个;) (9认同)