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

新手上路,请多包涵

我有一个 FILE * ,通过调用 fopen() 返回。我需要从中获取文件描述符,以便在其上进行 fsync(fd) 之类的调用。从文件指针获取文件描述符的函数是什么?

原文由 Phil Miller 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

原文由 Phil Miller 发布,翻译遵循 CC BY-SA 3.0 许可协议

即使 fileno(FILE *) 可能返回文件描述符,也要非常小心不要绕过 stdio 的缓冲区。如果存在缓冲区数据(读取或未刷新的写入),则从文件描述符读取/写入可能会给您带来意想不到的结果。

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

原文由 Mark Gerolimatos 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题