来自APUE
每个标准I / O流(即每个
FILE
对象)都有一个关联的文件描述符。
在一个程序中,多个FILE
对象可以共享同一文件描述符吗?
如果是,是通过使用相同的给定文件描述符多次调用fdopen()
来完成的,每个文件描述符均返回指向不同FILE
对象的指针?
如果我在指向给定flcose()
对象的指针上FILE
,如果还有另一个{{1 }}对象共享相同的文件描述符?
谢谢。
答案 0 :(得分:3)
是的,但这是一个非常糟糕的主意,因为fclose
关闭了相关联的fd,因此,您只能fclose
其中之一,而没有它导致文件描述符上的close
不再属于FILE
,并且可能已被重新分配用于其他用途。原则上,除非您使用_exit
/ _Exit
或异常终止,否则即使在终止过程中也会发生这种情况。
一个相关的问题是,您是否可以使用不同的文件描述符(每个文件描述符由dup
生成,并且具有多个文件,因此它们是相同的基础打开文件描述)。是的,虽然这可能不是一个好主意,但是有一些POSIX指定的规则可以使您遵循以下规则来确保安全:
2.5.1 Interaction of File Descriptors and Standard I/O Streams