多个“ FILE”对象可以共享同一文件描述符吗?

时间:2018-08-30 00:24:54

标签: c linux io

来自APUE

  

每个标准I / O流(即每个FILE对象)都有一个关联的文件描述符。

在一个程序中,多个FILE对象可以共享同一文件描述符吗?

如果是,是通过使用相同的给定文件描述符多次调用fdopen()来完成的,每个文件描述符均返回指向不同FILE对象的指针?

如果我在指向给定flcose()对象的指针上FILE,如果还有另一个{{1 }}对象共享相同的文件描述符?

谢谢。

1 个答案:

答案 0 :(得分:3)

是的,但这是一个非常糟糕的主意,因为fclose关闭了相关联的fd,因此,您只能fclose其中之一,而没有它导致文件描述符上的close不再属于FILE,并且可能已被重新分配用于其他用途。原则上,除非您使用_exit / _Exit或异常终止,否则即使在终止过程中也会发生这种情况。

一个相关的问题是,您是否可以使用不同的文件描述符(每个文件描述符由dup生成,并且具有多个文件,因此它们是相同的基础打开文件描述)。是的,虽然这可能不是一个好主意,但是有一些POSIX指定的规则可以使您遵循以下规则来确保安全:

2.5.1 Interaction of File Descriptors and Standard I/O Streams