C 当管道就位并覆盖了stdout和stderr时,printf会去哪里?
我已经设置了重定向stderr和stdout的管道。当我使用printf时,它是将数据发送到stdout还是流1 如果它将其发送到stdout,我如何将其配置为将数据发送到流1 当我使用printf时,它是将数据发送到stdout还是流1C 当管道就位并覆盖了stdout和stderr时,printf会去哪里?,c,pipe,printf,io-redirection,C,Pipe,Printf,Io Redirection,我已经设置了重定向stderr和stdout的管道。当我使用printf时,它是将数据发送到stdout还是流1 如果它将其发送到stdout,我如何将其配置为将数据发送到流1 当我使用printf时,它是将数据发送到stdout还是流1 printf函数将数据发送到stdout。由于您已重定向stdout,它现在指向的文件不是您的控制台printf不在乎它是什么,它只是尽可能长时间地写 如果它将其发送到stdout,我如何将其配置为将数据发送到流1 所以,不,你不需要做任何特殊的事情——它是自
printf
函数将数据发送到stdout
。由于您已重定向stdout
,它现在指向的文件不是您的控制台printf
不在乎它是什么,它只是尽可能长时间地写
如果它将其发送到stdout,我如何将其配置为将数据发送到流1
所以,不,你不需要做任何特殊的事情——它是自动处理的
当我使用printf时,它是将数据发送到stdout还是流1
printf
函数将数据发送到stdout
。由于您已重定向stdout
,它现在指向的文件不是您的控制台printf
不在乎它是什么,它只是尽可能长时间地写
如果它将其发送到stdout,我如何将其配置为将数据发送到流1
所以,不,您不需要做任何特殊的事情——它是自动处理的。printf总是将数据发送到stdout。如果您使用管道重定向了stdout,它将转到stdout被管道传输到的进程
流1(假设您是指与文件描述符1关联的流)是标准输出,除非您正在做一些非常奇怪的事情(在这种情况下,停止)printf总是将数据发送到标准输出。如果您使用管道重定向了stdout,它将转到stdout被管道传输到的进程
流1(假设您是指与文件描述符1关联的流)是标准输出,除非您正在做一些非常奇怪的事情(在这种情况下,停止)我认为您对所涉及的层的理解有点误导 C运行时的
printf
使用文件*stdout
,这(除非您使用freopen
或类似工具)实际上相当于fdopen(1,“w”)
:即,文件描述符1上的缓冲输出
通常,当您运行my_程序时,会将文件描述符1附加到终端。运行my_program>file
时,在程序开始运行之前,文件描述符#1会附加到file
。因此,printf
,写入stdout
,它(除非您更改)将涂鸦为文件描述符#1,将打印到文件而不是终端
程序之外的任何东西都不关心缓冲I/O,也不关心如何处理自己的标准输出,我认为您对所涉及的层的理解有点误导 C运行时的
printf
使用文件*stdout
,这(除非您使用freopen
或类似工具)实际上相当于fdopen(1,“w”)
:即,文件描述符1上的缓冲输出
通常,当您运行my_程序时,会将文件描述符1附加到终端。运行my_program>file
时,在程序开始运行之前,文件描述符#1会附加到file
。因此,printf
,写入stdout
,它(除非您更改)将涂鸦为文件描述符#1,将打印到文件而不是终端
程序之外的任何东西都不关心缓冲I/O,也不关心如何使用自己的stdout