1

我已经设置管道来重定向标准错误和标准输出。当我使用 printf 时,它会将数据发送到标准输出还是流 1?

如果它将它发送到标准输出,我该如何配置它以将数据发送到流 1?

4

3 回答 3

3

当我使用 printf 时,它会将数据发送到标准输出还是流 1?

printf函数将数据发送到stdout. 由于您已重定向stdout它现在指向控制台以外的文件。printf不在乎它是什么,它只是尽可能长时间地写。

如果它将它发送到标准输出,我该如何配置它以将数据发送到流 1?

所以,不,你不需要做任何特别的事情——它会被自动处理。

于 2009-03-19T20:46:13.220 回答
3

printf 总是将数据发送到标准输出。如果您使用管道重定向了标准输出,它将转到标准输出被管道传输到的进程。

并且流 1(假设您的意思是与文件描述符 1 关联的流)标准输出,除非您正在做一些非常奇怪的事情(在这种情况下,停止)

于 2009-03-19T20:48:56.240 回答
2

我认为您对所涉及的层的理解有点误导。

C 运行时的printfuses FILE *stdout,它(除非您使用freopen或类似)实际上等效于fdopen(1, "w"): ,即文件描述符 #1 上的缓冲输出。

通常,当您运行时my_program,文件描述符 #1 会附加到终端。当您运行时my_program > file,文件描述符 #1 会在您的程序开始运行file 之前附加到。因此printf,写入stdout(除非您更改它)乱写文件描述符#1,将打印到文件而不是终端。

程序之外的任何东西都不关心缓冲 I/O 或你自己的stdout.

于 2009-03-19T20:52:48.727 回答