来福网

标准流

在Unix和类Unix系统中,如同某些编程语言接口一样,标准流是当一个计算机程序执行时,在它和它的环境间(典型为终端),事先连接的输入和输出频道。这三个I/O链接称作“标准输入”、“标准输出”和“标准错误输出”。

在Unix之前的操作系统,程序必须明确指出链接到合适的输入和输出资料。对这当中的许多系统而言,这牵涉一些错综复杂而又与特定操作系统相关的事,是一件吓人的程序设计挑战。如控制环境设置、访问一个文件表格、决定区域资料集、和决定读卡器、磁带、磁盘、打印机、打卡机或交互式终端。

Unix 提供许多开创产的进步,其中之一是提供 :它免除了程序须要知道或在意它正与哪个设备沟通。 Unix 借由资料流的概念来消除这种复杂:一种资料字节的有序序列,直到读到文件结尾。程序员亦可依需求写入而无须宣告写入多少或如何组织。

另一个 Unix 突破为默认自动链接输入和输出-程序(和程序员)不用为了典型程序创建输入和输出。相对地,之前操作系统通常要求一些-有时复杂-工作控制语言(Job Control Language(英语:Job Control Language))以创建链接,或者,相者近似于协调的责任。

既然 Unix 提供标准流,Unix C 的执行环境被要求要支持它。结果不管什么操作系统, C 的执行环境(及 C 的派生)都提供类似功能。

标准输入是指输入至程序的资料(通常是文件)。程序要求以(read)操作来传输资料。并非所有程序都要求输入。如或程序(显示一个目录中的文件名)运行时不用任何输入。

除非重导向,输入是预期由 键盘获取的。

标准输入的文件描述符为 0。在POSIX 的定义是 STDIN_FILENO;相对应的 变量为 FILE* stdin ;类似地, 变量为 std::cin

标准输出是指程序写输出资料的流。程序要求资料传输使用的运算。并非所有程序都要求输出。如或程序在成功完成时是沉默的。

除非重导向,输出为 终端。

标准输出的文件描述符为 1 。POSIX 定义是 STDOUT_FILENO;相对应的 变量为 FILE* stdout ;类似地, 变量为 std::cout

标准错误输出是另一输出流,用于输出错误消息或诊断。它独立于标准输出,且可以分别被重导。常见的目的则为启始这个程序的终端,即使其被重导亦如此。例如:一个流水线中的程序的输出被重导到下一个程序,但错误消息仍然直接流向文字终端。

把和导到相同的目的地,如文字终端,是可以(且正常)的。消息会以如同程序写入的顺序来出现,除非使用了缓冲。(例如,一个常见状况是,当标准错误流未使用缓冲,但标准输出流使用了缓冲;在这种情况下,如果标准输出的缓冲器还没满的话,较迟写到标准错误的文字可能会较早出现在终端。

标准错误输出的文件描述符为 2 ;POSIX 定义为 STDERR_FILENO;相对的 变量 FILE* stderr。C++ 标准头文件提供两个相关的变量: std::cerrstd::clog,前者用于无缓冲的而后者使用和其它 C++ 流相同的缓冲机制。

大部分壳程序允许使用

&1

将重导向到的目的。

Fortran 提供类于 Unix 文件描述符:UNIT=5 用于 stdin 、 UNIT=6 用于 stdout 和 UNIT=0 用于 stderr 。

! FORTRAN 77 example PROGRAM MAIN READ(UNIT=5,*)NUMBER WRITE(UNIT=6,'(F5.3)')' NUMBER IS: ',NUMBER END

后台-插件-广告管理-内容底部广告位PC端
后台-插件-广告管理-内容底部广告位手机端

评论

全部评论