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

  • Post author:
  • Post category:其他



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

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

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




  1. /*



  2. 在Unix系统下,读取键盘输入,向屏幕输入信息.



  3. 手动打开键盘和显示器文件并进行读写.



  4. */






  5. #include <stdio.h>






  6. int


    main(


    void


    )


  7. {


  8. FILE


    *pf;


  9. pf=fopen(

    “/dev/tty”


    ,


    “a+”


    );


    //终端字符文件





  10. char


    sbuf[100];



  11. fprintf(pf,

    “Please input a string: ”


    );


  12. fscanf(pf,

    “%s”


    ,sbuf);


  13. fprintf(pf,

    “The input string is : \”%s\”.\n”


    ,sbuf);




  14. return


    0;


  15. }


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

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




  1. /*



  2. 在任意系统下,读取键盘输入,向屏幕输入信息.



  3. 显式得使用标准输入,标准输出指针.



  4. */







  5. #include <stdio.h>





  6. int


    main(


    void


    )


  7. {


  8. char


    sbuf[100];


  9. fprintf(stdout,

    “Please input a string: ”


    );


  10. fscanf(stdin,

    “%s”


    ,sbuf);


  11. fprintf(stdout,

    “The input string is : \”%s\”.\n”


    ,sbuf);



  12. return


    0;


  13. }

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



  1. /*



  2. 标准的C程序,读取键盘输入,向屏幕输入信息.



  3. 隐式得使用标准输入,标准输出指针.



  4. */






  5. #include <stdio.h>





  6. int


    main(


    void


    )


  7. {


  8. char


    sbuf[100];


  9. printf(

    “Please input a string: ”


    );


  10. scanf(

    “%s”


    ,sbuf);


  11. printf(

    “The input string is : \”%s\”.\n”


    ,sbuf);



  12. return


    0;


  13. }


从中可看出,使用scanf()和printf()时,无需向其提供文件指针,这是因为它们知道所需 的文件指针,它们操作的对象便是标准输入和标准输出所指向的文件.


结论:

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

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