2010-07-02 41 views
129

我有一个FILE *,通过向fopen()的调用返回。我需要从中获取文件描述符,以便在其上拨打电话fsync(fd)。从文件指针获取文件描述符有什么功能?如何将文件指针(FILE * fp)转换为文件描述符(int fd)?

+7

自答案在这个“危险”的形式鼓励。 – dmckee 2010-07-02 23:18:32

+0

或者你可以打开与开放(2),你将有一个文件描述符从开始 – 2013-06-29 16:13:34

+6

和逆文件:如何从一个文件描述符文件指针?](http://stackoverflow.com/问题/ 1941464 /如何到获得-A-文件指针从-A-文件描述符) – 2013-10-01 20:35:54

回答

168

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

+4

严格来说,不会有任何需要提及任何标题或库如果函数的标准确实是一个部分C库。然而,这不是标准的,这就是为什么至少提到标题是有意义的。在标准C库 – AnT 2010-07-02 23:55:06

+16

访问功能确实需要包括标题,至少如果你的编译器期望原型(我从来不记得什么是真正的标准行为在这方面)。如果没有标题,则不会在C文件的开头定义名称。 – Novelocrat 2010-07-03 00:20:16

+0

@Novelocrat:我不是说没有必要包含任何东西。我只是表示,为*标准*函数找到适当的头文件名总是很容易的。即在答案中提及确切的标题名称并不重要。 – AnT 2010-07-03 01:51:43

27

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

要回答的问题一边一个,一个文件描述符转换为一个文件指针,使用fdopen(3)

+0

我不认为这对专门寻找这个问题的人有帮助,而且这已经在OP撰写之前一个月的OP的评论部分得到了回答。这更多的是与真实信息相对立的逻辑澄清。 – kevr 2018-02-01 15:03:42

相关问题