【发布时间】:2019-06-29 19:38:03
【问题描述】:
是否可以在不使用fileno(FILE* file)的情况下从文件指针中获取文件描述符?
特别是,是否可以只使用 C 标准库中的函数?
(我的问题的原因实际上是因为 fileno() 是一个 POSIX 标准函数
但不是标准的 C.)
【问题讨论】:
-
在 linux 上你可以查看 /proc/{你的进程 pid}/fd 并找到你打开的文件并获取相应的 fd
-
我认为你应该为你知道的方法发布一个完整的可重现的例子,即使它是微不足道的,然后询问你想如何修改它。
-
为什么要避免使用可靠且可移植的方法来获取信息? (它至少可以移植到其他 POSIX 系统。)您可以四处寻找
<stdio.h>,看看您是否可以确定信息存储在FILE *底层结构中的位置,但这是毫无意义的艰苦工作并且不可靠(它可能是一个完全不透明的类型,虽然它通常不是)或可移植的。 -
文件描述符不是标准 C 的一部分。C 标准没有义务让系统在文件描述符之上实现标准 I/O 库。因此,无法使用标准 C 从文件流中获取文件描述符。文件描述符的概念不是 C 标准的一部分。这就是
fileno()不是标准 C 函数的原因。 -
open()函数也不是标准 C 的一部分;使用文件描述符的函数都不是标准 C 的一部分。它们通常是 POSIX 的一部分,尽管大多数系统提供了 POSIX 未定义但确实使用文件描述符的扩展函数。
标签: c