是否可以在不使用fileno(FILE* file)
的情况下从文件指针获取文件描述符?
特别是,是否可以仅使用C标准库中的函数?
(我提出这个问题的原因实际上是因为fileno()
是POSIX标准函数
但不是标准C。)
答案 0 :(得分:5)
否。
文件描述符不是标准C的一部分。C标准没有义务让系统使用文件描述符来实现标准I / O库。因此,无法使用标准C从文件流中获取文件描述符。文件描述符的概念仅仅是C标准的一部分。这就是fileno()
不是标准C函数的原因。
C11标准§7.21 Input/output <stdio.h>
没有使用文件描述符指定任何功能。
如果
fileno()
不是标准函数,那么函数open()
返回的值是什么?
open()
函数也不是标准C的一部分;没有使用文件描述符的功能都不是标准C的一部分。POSIX standard确实提供了使用文件描述符的功能-其中很多,包括open()
和fileno()
。大多数系统提供的扩展功能不是POSIX定义的,但确实使用文件描述符。