1
C语言程序设计
1.10.3.3 9.3.3 标准流式文件stdin、stdout和stderr

9.3.3 标准流式文件stdin、stdout和stderr

当一个C程序开始执行时,系统首先自动打开预定义的三个流式文件:标准输入stdin、标准输出stdout和标准错误stderr。当程序运行结束时,系统又自动将这些标准文件关闭,用户不能控制它们的打开与关闭。因为它们是文件指针,缓冲型I/O系统可以把它们应用于任何一个使用FILE类型的函数中。通常stdin被指定为键盘,用于从控制台读;stdout和stderr被指定为显示终端,用于向控制台写。但是,用户在执行某个程序时,可以临时性地改变系统的设定,把标准设备文件指定为其他设备文件。由用户临时性地改变标准设备文件的设定,称之为标准设备文件的换向,也称为I/O的重新定向。这里必须注意,“重新定向”仅是在本次程序中有效,程序执行完后,将自动恢复系统原来的缺省设定。

重新定向是操作系统的功能,在UNIX和MS-DOS中,只要在命令行给出如下符号,便可进行I/O的重新定向。

〈  标准输入的重定向符号

〉  标准输出的重定向符号

凡是要从标准输入stdin输入数据,并向标准输出stdout输出数据的这类程序,由于在操作系统下,可以进行I/O重定向,因此其输入/输出不受键盘和屏幕的限定,而成为通用的文件处理程序。

比如下面程序是一个使用标准设备文件的输入输出处理程序。其中的getchar()和putchar()函数使用标准输入stdin和标准输出stdout进行字符的输入和输出。

例9-5 使用标准输入stdin和标准输出stdout进行字符输入和输出的程序。

img679

如果程序需要重新定向,可采用如下方式:

  C:〉9-5〈infile  字符从文件infile中输入

  C:〉9-5〉outfile  输出字符写入文件outfile中

  C:〉9-5〈infile〉outfile 将文件infile内容复制到文件outfile

  C:〉9-5〉prn  输出从显示器换向打印机

这里C:〉是DOS操作系统命令提示符,其中C:是盘符,9-5是将上面的源程序经编译、连接而成的可执行程序9-5.exe,infile为输入行文文件,outfile为输出行文文件,prn为标准打印机。将文件9-1.cpp复制进文件new.cpp,使用重新定向,采用下面方式:

  C:〉9-5〈9-1.cpp〉new.cpp

除了上述标准设备文件的重新定向功能外,还有标准设备文件的管道功能。它是把一个可执行程序的标准输出与另一个可执行程序的标准输入连通,这类似于两者之间建立了一个传输的管道,例如:

  DIR|9-5

其中,“|”为管道连接符号。这里DOS命令DIR的输出直接作为9-5的输入,DIR在显示屏上输出的目录通过“管道”连接作为9-5的输入,然后由9-5输出到显示器上。管道功能为多个程序联合运行提供了支持。