linux 关闭标准输出(STDOUT)如何影响printf?

2ledvvac  于 2023-11-17  发布在  Linux
关注(0)|答案(2)|浏览(192)

如果有人关闭了进程'STDOUT在其文件描述符表中,如下所示:

close(STDOUT);

字符串
然后立即打开一个文件进行读/写:

int ​fd = open(​"myFile"​, O_RDWR);


然后使用printf

printf("hello");


我知道它不会显示在屏幕上,但是它会打印在文件中吗?如果没有,你必须使用fprintfwrite系统调用吗?

ivqmmu1c

ivqmmu1c1#

从open的man页面:

成功调用返回的文件描述符将是进程当前未打开的最小编号的文件描述符。

当您关闭STDOUT的文件描述符时,随后的打开系统调用将把stdout的fd分配给新文件。Printf只是向fd发送它是否是stdout无关紧要。因此,在这种情况下,printf将输出转储到“myfile”

7qhs6swi

7qhs6swi2#

函数printf将把它的输出发送到文件。默认情况下,进程的STDOUT(其文件描述符为1)连接到屏幕,但是在运行close(STDOUT)open()之后,您已经重新分配了进程的STDOUT,以将输出路由到打开的文件open(),即myFile
这种方式工作的原因是基于操作系统如何管理文件描述符的假设。在UNIX系统中,操作系统从零开始寻找空闲的文件描述符。在这种情况下,STDOUT将是第一个可用的(因为它是空闲文件描述符池中的最小整数)例如,进程对标准输出文件描述符printf()的任何后续写入操作都将透明地路由到新打开的文件,而不是屏幕。
资料来源:

相关问题