5. 标准输入输出文件

标准输入输出文件 是计算机程序与操作系统之间进行数据交互的基础文件流。其中包含三个标准文件:stdinstdoutstderr,这三个文件在程序启动时(进程开始时)就被打开且一直可用。

三个标准输入输出文件:

  1. stdin - 标准输入文件,默认是键盘;ctrl+d键结束输入。
  2. stdout - 标准输出,默认是控制台终端,可以重定向到文件。
  3. stderr - 标准错误输出,用于输出错误提示信息,默认是控制台终端,可以重定向到文件。

注意:

此三个文件指针是全局变量,在 stdio.h 中声明,这三个文件指针不需要打开就可以使用,也不要使用 fclose 关闭三个文件指针。

我们在标准输入中使用的 printf 函数的实质就是向 stdout 中写入数据。scanf 函数则是从文件 stdin 中读取数据。即:

printf("hello world!");
// 等同于
fprintf(stdout, "hello world!");

scanf("%d", &i);
// 等同于
fscanf(stdin, "%d", &i);

示例:

使用上述三个标准输入输出文件结合文件操作函数代替基本输入输出函数进行控制台终端终端的输入输出操作。

// filename: std_io.c
#include <stdio.h>

int main(int argc, char * argv[]) {
    int value;
    // 打印 "hello world!\n" 到屏幕终端。
    fwrite("hello world!\n", 1, 13, stdout);
    fprintf(stderr, "I'm a error info\n");

    fputs("please input a number:", stdout);
    fscanf(stdin, "%d", &value);
    fprintf(stdout, "value: %d\n", value);

    return 0;
}

编译和运行结果如下:

weimingze@mzstudio:~$ gcc -o std_io std_io.c
weimingze@mzstudio:~$ ./std_io
hello world!
I'm a error info
please input a number:666
value: 666

可见,使用文件操作,结合标准输入输出文件也同样可以达到 基本输入输出函数的功能。

实验:

使用 fclose 函数关闭 stdinstdoutstderr 三个文件,然后测试 scanfprintf 等函数是否可用。