流
分为输入流和输出流
- 输入流:调用
fprintf(),puts()
等会打开 - 输出流:调用
fscanf(),gets()
等会打开
缓冲区
缓冲区是内存的一段空间,当程序需要从外存中读取文件中的数据时,系统先读入足够多的数据到缓冲区中,然后程序对缓冲区中的数据进行处理。
根据缓冲区是否由系统自动提供,分为缓冲文件系统和非缓冲文件系统
早期的UNIX操作系统是非缓冲模式,被称为UNIX I/O系统或者非缓冲I/O系统
ANSI C(C89,C90)只支持缓冲文件系统。
标准流
c语言中预先定义了三种标准流 stdin,stdout,stdrr(使用很少). 这些流定义在stdio.h中,默认连接到键盘和显示器,多数系统也允许重定向到文件输入输出
- stdin: 调用
scanf(),getchar(),gets()
时会打开 - stdout: 调用
printf(),putchar(),puts()
时会打开
stdin流和stdout流允许用户交互式运行程序,通过重定向实现
在cmd可以通过输入program.exe
在cmd中运行,通过标准输入流从键盘输入数据,通过标准输出流把结果输出到显示器。如果使用重定向模式,则使用命令program.exe<abc.in>abc.out
,操作系统按照非交互式方式运行程序,标准输入被重定向到文件my.in,标准输出流被重定向到文件my.out
用户自定义流
当需要读写文件的时候,程序员可以使用重定向标准流到文件(如上)。还可以重新创建一个用户自定义流。
操作标准:
- 创建流(打开文件)
2.判断操作成败
3.读写
4.关闭流
打开流
1.定义流变量
流变量是文件类型指针变量
#include<stdio.h>
FILE *fp
打开失败返回NULL
要判断下是否打开成功
结束后要关闭流 fclose();
FILE *fopen( const char * filename, const char * mode );
int fclose( FILE *fp );
int fputc( int c, FILE *fp );
int fputs( const char *s, FILE *fp );
int fprintf(FILE *fp,const char *format, ...)
int fgetc( FILE * fp );
char *fgets( char *buf, int n, FILE *fp );//n个字符
int fscanf(FILE *fp, const char *format, ...)