如果有人关闭了进程'STDOUT在其文件描述符表中,如下所示:
STDOUT
close(STDOUT);
字符串然后立即打开一个文件进行读/写:
int fd = open("myFile", O_RDWR);
型然后使用printf:
printf
printf("hello");
型我知道它不会显示在屏幕上,但是它会打印在文件中吗?如果没有,你必须使用fprintf或write系统调用吗?
fprintf
write
ivqmmu1c1#
从open的man页面:
成功调用返回的文件描述符将是进程当前未打开的最小编号的文件描述符。
当您关闭STDOUT的文件描述符时,随后的打开系统调用将把stdout的fd分配给新文件。Printf只是向fd发送它是否是stdout无关紧要。因此,在这种情况下,printf将输出转储到“myfile”
7qhs6swi2#
函数printf将把它的输出发送到文件。默认情况下,进程的STDOUT(其文件描述符为1)连接到屏幕,但是在运行close(STDOUT)和open()之后,您已经重新分配了进程的STDOUT,以将输出路由到打开的文件open(),即myFile。这种方式工作的原因是基于操作系统如何管理文件描述符的假设。在UNIX系统中,操作系统从零开始寻找空闲的文件描述符。在这种情况下,STDOUT将是第一个可用的(因为它是空闲文件描述符池中的最小整数)例如,进程对标准输出文件描述符printf()的任何后续写入操作都将透明地路由到新打开的文件,而不是屏幕。资料来源:
close(STDOUT)
open()
myFile
printf()
open
2条答案
按热度按时间ivqmmu1c1#
从open的man页面:
成功调用返回的文件描述符将是进程当前未打开的最小编号的文件描述符。
当您关闭STDOUT的文件描述符时,随后的打开系统调用将把stdout的fd分配给新文件。Printf只是向fd发送它是否是stdout无关紧要。因此,在这种情况下,printf将输出转储到“myfile”
7qhs6swi2#
函数
printf
将把它的输出发送到文件。默认情况下,进程的STDOUT
(其文件描述符为1)连接到屏幕,但是在运行close(STDOUT)
和open()
之后,您已经重新分配了进程的STDOUT
,以将输出路由到打开的文件open()
,即myFile
。这种方式工作的原因是基于操作系统如何管理文件描述符的假设。在UNIX系统中,操作系统从零开始寻找空闲的文件描述符。在这种情况下,
STDOUT
将是第一个可用的(因为它是空闲文件描述符池中的最小整数)例如,进程对标准输出文件描述符printf()
的任何后续写入操作都将透明地路由到新打开的文件,而不是屏幕。资料来源:
open
system call的