标准输入、标准输出究竟是什么?

来源:互联网 发布:linux的cut命令 编辑:程序博客网 时间:2024/04/29 11:02

本文转自:http://blog.csdn.net/astropeak/article/details/6651747

本文将从基本原理解析标准输入,标准输出的由来(最终结论见最后).

对于一个运行的程序,不可避免地要进行某些输入输出操作,也即I/O操作.对于I/O操 作,C语言提供了一系列标准I/O函数,来完成输入输出任务.

最主要的标准I/O函数包括:fopen()(打开一个文件),fprintf()(写文件),fscanf()(读文 件).读写一个文件的步骤为:

打开文件,同时得到指向文件的指针,然后以该指针为参数, 调用相应的读,写函数进行文 件读写.例如:若想从键盘获取输入(也即读文件,Unix系统下程序可将键盘和屏幕当作普通文件对待),需首先使用fopen()打开键盘这个文件,获 得指向它的指针,然后以该指针为参数调用fscanf()读取该文件内容,从而获得键盘输入;若 想输出信息到显示器(也即写文件),需首先打开显示器这个文件,获得指向它的指针,然后 以该指针为参数调用fprintf()向该文件写入信息, 从而向显示器输出信息.以上步骤在 Unix系统中,可通过以下代码实现:

[cpp] view plaincopy
  1. /*  
  2.     在Unix系统下,读取键盘输入,向屏幕输入信息. 
  3.     手动打开键盘和显示器文件并进行读写. 
  4.  */  
  5.   
  6. #include <stdio.h>   
  7.   
  8. int main(void)  
  9. {  
  10.     FILE *pf;  
  11.     pf=fopen("/dev/tty","a+");       //终端字符文件  
  12.     char sbuf[100];  
  13.   
  14.     fprintf(pf, "Please input a string: ");  
  15.     fscanf(pf,"%s",sbuf);  
  16.     fprintf(pf,"The input string is : \"%s\".\n",sbuf);  
  17.   
  18.     return 0;  
  19. }  

注:/dev/tty为终端字符文件,该文件是对键盘,显示器的抽象,向该文件写入,则写入内 容将被显示在显示器,读该文件,则将从键盘获得输入.

采用以上方式获取键盘输入,向屏幕输出将是系统相关的(因为不同系统对键盘,屏幕的 抽象方式不同).为了封装键盘,屏幕I/O操作的底层实现细节,C语言要求系统为每个程序 提供两个指针,这两个指针分别指向键盘和屏幕,并将这两个指针命名为:stdin和 stdout.这两个指针就是所谓的标准输入和标准输出.此时,从键盘获取输入,向屏幕输出 信息的代码可写为:

[cpp] view plaincopy
  1. /*  
  2.    在任意系统下,读取键盘输入,向屏幕输入信息. 
  3.    显式得使用标准输入,标准输出指针. 
  4.  */  
  5.       
  6.   
  7. #include <stdio.h>   
  8. int main(void)  
  9. {   
  10.     char sbuf[100];   
  11.     fprintf(stdout, "Please input a string: ");   
  12.     fscanf(stdin,"%s",sbuf);   
  13.     fprintf(stdout,"The input string is : \"%s\".\n",sbuf);   
  14.     return 0;  
  15. }  
  16.       

与代码1不同,该代码将能够运行于任何支持标准C的系统.由于从标准输入获取输入,向标 准输出显示信息是非常常用的操作(几乎每个控制台程序均包含该操作),因此C语言提供 了专门用于从标准输入获取信息和向标准输出显示信息的函数,即scanf()和printf().此 时,从键盘获取输入,向屏幕显示信息的代码可写为:

[cpp] view plaincopy
  1. /*  
  2.    标准的C程序,读取键盘输入,向屏幕输入信息. 
  3.    隐式得使用标准输入,标准输出指针. 
  4.  */  
  5.   
  6. #include <stdio.h>   
  7. int main(void)  
  8. {   
  9.     char sbuf[100];   
  10.     printf("Please input a string: ");   
  11.     scanf("%s",sbuf);   
  12.     printf("The input string is : \"%s\".\n",sbuf);   
  13.     return 0;  
  14. }  
  15.       
从中可看出,使用scanf()和printf()时,无需向其提供文件指针,这是因为它们知道所需 的文件指针,它们操作的对象便是标准输入和标准输出所指向的文件.

结论:

标准输入,标准输出是操作系统为C程序提供的文件指针,默认情况下,它们分别指向键盘 和屏幕.标准输入函数scanf()将从标准输入指向的文件读取信息,标准输出函数 printf()将输出信息到标准输出指向的文件.

注:标准输入,标准输出并非必须指向键盘或屏幕,用户程序可改变它们的指向.

Date: 2011-08-01 18:52:37 CST

原创粉丝点击