1 错误报告
void perror( char const *message); //定义在stdio.h中
如果message不是NULL或空字符串,perror函数会打印出message,后面跟一个分号和空格,然后打印出一条当前错误信息。
2 终止函数
void exit( int status ); //定义于stdlib.h
该函数用于终止程序的运行。status参数返回给操作系统,用于提示是否正常完成。
3 打开流
FILE *fopen ( char const *name, char const *mode );
这个函数用于打开一个流,返回一个FILE指针,name是要打开的文件或设备的名称,mode是打开模式。
执行成功会返回指针,执行失败会返回NULL。
|
读取 |
写入 |
添加 |
文本 |
r |
w |
a |
二进制 |
rb |
wb |
b |
1如果文件打开是用读取的,那么文件必须存在。
2如果文件打开是写入的,那么之前的内容会被删除,如果文件不存在就新建一个文件。
3如果添加模式打开,文件不存在也会创建,存在会在文件尾部写入数据。
FILE *fopen ( char const *name, char const *mode , FILE *stream);
这个函数会试图关闭这个流,并重新打开。
4关闭流
int fclose( FILE *f );
关闭函数会首先刷新缓冲区,然后关闭流,执行成功会返回0。
5 字符IO
int fgetc( FILE *stream );
int getc( FILE *stream );
int getchar( void ); //只从标准输入读取
每个函数从文件中读取下一个字符,如果到文件结尾就会返回常量EOF;
注意:函数的返回值为int。
int fputc( int character,FILE *stream );
int fputc( int character, File *stream );
int putchar( int character );
另外:getc,putc,getchar,putchar都是通过define定义的宏。
6撤销字符IO
int ungetc( int character, FILE *stream );
ungetc把之前读入的字符返回到流中,这样可以在以后被重新读入。
7 行IO
1. 未格式化的行IO
char *fgets( char *buffer, int buffer_size, FILE *stream );
char *gets( char *buffer );
int fputs( char const *buffer, FILE *stream );
int puts( char const *buffer );
fgets从stream中读取字符串,复制到buffer中,它读取到换行符并存储到缓冲区后就不会再读取了。
注意:fgets()无法把数据读入小于两个字符的缓冲区,因为需要保留一个NUL
2. 格式化的行IO
scanf格式代码:
int main(){
int a,b;
while(fscanf(stdin,"%d %d",&a,&b)==2){
//while(fscanf(stdin,"%4d %4d",&a,&b)==2){ //这里给定宽度,限制4个或更少
printf("%d %d",a,b);
break;
}
}
scanf还可以从缓冲区中读取。
3. printf函数
注意:sprintf输出结果很长就会溢出缓冲区,就可能改写缓冲区后面内存的数据。
4. printf格式化:
8 二进制IO
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
size_t fwrite ( void *buffer, size_t size, size_t count, FILE *stream );
buffer是用于保存数据的内存指针,size是缓冲区字节数,count是读入/写入的元素数,stream是目标流。
9刷新和定位函数
int fflush( FILE *stream );
fflush可以把缓冲的数据立即刷新到物理硬盘中存储。
随机访问函数:
long ftell( FILE *stream );
long fseek( FILE *stream, long offset, int from )
ftell函数返回当前的位置,就是当前位置距离起始位置的偏移量。
fseek函数允许你在流中定位,改变下一个读写的位置。
fseek的替代函数:
void rewind( FILE *stream );
int fgetpos( FILE *stream, fpos_t *postion );
int fsetpos( FILE *stream, fpos_t const *postion );
rewind函数会回到文件的起始位置。fgetpos和fsetpos是ftell和fseek的替代函数。
9 设置缓冲方式
void setbuf( FILE *stream, char *buf );
int setvbuf( FILE *stream, char *buf, int mode, );
setbuf设置了另一个数组对流缓冲,这个数组的长度必须为BUFF_SIZE(stdio中定义)。
setvbuf的mode参数分三种模式。
1_IOFBF指定一个完全缓冲的流;
2_IONBF指定一个不完全缓冲的流;
3_IOLBF指定一个行缓冲流,每到一个换行符缓冲。
10 判断流的状态
int feof( FILE *stream ); //文件末尾返回true
int ferror( FILE *stream ); //出现读写错误返回true
void clearer( FILE *stream ); //错误标志重置
11临时文件
临时文件用来临时保存数据,当程序结束后就自动删除。
FILE *tmpfile( void );
12文件操纵函数
int remove( char const *filename );
int rename( char const *oldname, char const *newname );