流是一个连接输入源与输入缓冲区、输出缓冲区与输出目的地的管道。如果不使用缓冲区,流则直接连通输入源和输出目的地。磁盘上的文件是常用的输入源和输出目的地。
文件指针
C程序中的流是通过文件指针访问的,其类型为FILE *
。FILE
是在stdio.h
中定义的类型。虽然操作系统通常会限制在任意时刻打开的流的数量,但可以声明任意数量的FILE *
类型变量。
在stdio.h
中提供了3个文件指针stdin
,stdout
和stderr
,分别用以访问标准输入流、标准输出流和标准错误流。标准输入流的输入源为键盘,标准输出流和标准错误流的输出目的地为屏幕。
文件指针 | 流 | 默认含义 |
---|---|---|
stdin |
标准输入 | 键盘 |
stdout |
标准输出 | 屏幕 |
stderr |
标准错误 | 屏幕 |
scanf
、printf
、putchar
、getchar
、puts
和gets
都是通过stdin
输入,通过stdout
输出的。
某些操作系统通过重定向机制改变标准流的默认含义。输入重定向将stdin
访问的流的输入源由键盘改为文件,输出重定向将stdout
访问的流的输出目标由屏幕更改为文件。在Linux
系统中,输入重定向是使用<
后接输入文件名实现的,而输出重定向是使用>
后接输出文件名实现的,同时还可以将输出重定向和输入重定向合并使用,其使用格式为:
运行程序名 <输入文件名
运行程序名 >输出文件名
运行程序名 <输入文件名 >输出文件名
为了避免在重定向时将错误信息也输入到文件中,使用stderr
输出错误信息。
/*************************************
* redirect.c *
* *
* 输入输出重定向 *
*************************************/
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
printf("输入两个整数: ");
scanf("%d%d", &x, &y);
printf("x = %d, y = %d\n", x, y);
return 0;
}