c - 从没有 fileno() 的文件指针获取文件描述符

标签 c

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

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

最佳答案

没有。

文件描述符不是标准 C 的一部分。C 标准没有义务要求系统使用文件描述符来实现标准 I/O 库。因此,无法使用标准 C 从文件流中获取文件描述符;文件描述符的概念并不是 C 标准的一部分。这就是为什么 fileno()不是标准的 C 函数。

C11 标准 §7.21 Input/output <stdio.h> 没有使用文件描述符指定任何函数。

If fileno() is not a standard function, what's the value that the function open() returns?

open()函数也不是标准 C 的一部分;使用文件描述符的函数都不是标准 C 的一部分。 POSIX standard确实提供了使用文件描述符的函数——其中很多,包括 open() fileno() .大多数系统都提供了 POSIX 未定义但使用文件描述符的扩展函数。

关于c - 从没有 fileno() 的文件指针获取文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820378/

相关文章:

c - 在 Linux 中使用 makefile 将源文件更新到不同的文件夹

c - 什么会导致静态二进制文件中的文本段不可共享?

c - 我如何获得 D-Bus 属性的值?

C 二维数组内存分配

c - 如何在 32 位计算机上使用 VS 2005 交叉编译 64 位 DLL?

c - `timer_settime()` 的奇怪行为

c - 为什么我的 freeMem 函数需要 char* 和 addMem 函数 char**

c - 生产者消费者的解决方案

c - 汇编器生成否定形式的条件,而不是肯定形式的条件

objective-c - 将整数转换为十六进制