如何从文件描述符获取FILE指针?


Answers:


101

用途fdopen()

FILE* fp = fdopen(fd, "w");

34
并从FILE *获取文件描述符,请使用fileno()linux.die.net/man/3/fileno
Lee Netherton

2
如果fd以某些标志(例如O_NONBLOCKfdopen打开-用新标志将其打开后会发生什么?它们会xor一起被取代还是被取代?
xealits

5
@jww:文件描述符不是以ANSI C开头的。
Rufflewind

2
fdopen多次打电话有什么不好吗?(假设它发生在一次又一次调用的函数中)
phil294 '17

2
@xealits FILE *的选项必须在已打开的文件描述符的范围内。因此,如果您以只读方式打开了fd,而以只读方式打开了FILE *,则它应该引发异常。有关更多信息,请参考ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…–
Tjad Clark


-8

没有标准的方法可以做到这一点(或相反),因为C标准对文件描述符没有什么可说的。您的特定平台可能会或可能不会提供这种机制。


17
取决于您所说的“标准”。POSIX是一个标准。
理查德·彭宁顿

12
问题是关于文件描述符。;-)
理查德·彭宁顿2009年

11
@Neil>被标记为C的问题并不意味着“告诉我有关C标准的冬奥真理”,而是“我正在用C进行编码,但我做不到这一点,请告诉我是否有可能以及如何实现? ”
格雷戈里·帕科斯

8
我同意没有标准的方法来执行此操作,但是OP的提及mkstemp暗示在此特定情况下可以接受非标准解决方案。但是,在那种情况下,他应该已经添加了posix标签(我看到以后已经添加了)。
Emerick Rogul,2009年

9
@Neil,以及网络的目的和生活的意义。如果您说自己有不同的意见,那将更有意义。我还怀疑SO是否完全是对标准的分裂。而且这不是很实用依靠标注某人技能对应的23声誉的SO-体验
迈克尔Krelin -黑客
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.