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