从没有Fileno()的文件指针获取文件描述符

时间:2019-06-29 19:38:03

标签: c

是否可以在不使用fileno(FILE* file)的情况下从文件指针获取文件描述符?

特别是,是否可以仅使用C标准库中的函数? (我提出这个问题的原因实际上是因为fileno()是POSIX标准函数 但不是标准C。)

1 个答案:

答案 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定义的,但确实使用文件描述符。