“标准输出流”和“标准输出设备”有什么区别?

时间:2013-01-28 14:55:00

标签: c++ c linux windows winapi

互联网上的许多文章使用“标准输入/输出/错误流”术语,就好像每个术语与使用“标准输入/输出/错误设备”术语具有相同含义在其他文章。例如,许多文章都说默认情况下标准输出流是监视器,但可以重定向到文件,打印机或其他设备。

我们以标准输出为例:

  1. 标准输出流和标准输出设备有什么区别?如果有,那么它们之间的关系是什么?

    引自GetStdHandle()的帮助页面,

      

    “通过调用SetStdHandle,进程的标准句柄可以重定向,在这种情况下,GetStdHandle返回重定向的句柄。”

  2. 实际重定向哪一个,标准输出流或标准输出设备?

  3. 每个流程都有自己的标准流吗?

1 个答案:

答案 0 :(得分:6)

输出设备是可以写入数据的逻辑实体。

输出流是与输出设备的连接。

在一个过程中,您有一个标准输出流,它连接到您的标准输出设备。这意味着将数据写入标准输出流将其输出到标准输出设备。当然,您可以在流程开始后实际更改流绑定到哪个设备。

要回答您的上一个问题,答案是肯定的,每个流程都有自己的标准流。实际映射到哪个设备取决于操作系统以及进程的启动方式。例如,在Linux或Windows中直接从控制台启动的任何进程都默认将其标准输出流链接到该控制台。但是,可以使用“>”重定向此流。引用硬件设备或文件,或“管道”,可用于使一系列程序将其标准输出流重定向到彼此。

例如: echo hi > example.txt将使用参数“hi”启动程序“echo”,并将标准输出流设置为文件“example.txt”。

类似地,每个进程还有一个标准输入流和一个标准错误(输出)流。