C语言 IO流操作

时间:2021-08-30 21:37:50


错误报告函数: void perror( char const *message );           头文件stdio.h

终止执行: void exit ( int status );   status = EXIT_SUCCESS和EXIT_FAILURE     头文件stdlib.h

MS-DOS和UNIX都支持采用 $program <data> answer 的方式进行输入输出重定向。从文件data而不是键盘作为标准输入进行读取,标准输出写到文件answer而不是屏幕上。

FILENAME_MAX表示最长的文件名长度     FOPEN_MAX表示你能同时打开多少个文件

标准IO流操作函数:

C语言 IO流操作


FILE* fopen( char const *name, char const *mode);失败返回NULL    FILE并不是指文件,而是一个与文件相关联的流。

FILE* freopen(char const* filename, char const *mode, FILE* stream);   stream时需要打开的流,可以使fopen函数返回的流,也可以为stdin,stdout,stderr.

该函数首先关闭这个流,然后用指定文件和模式打开这个流,失败返回NULL。成功返回第三个参数。

int fclose( FILE *f);  关闭流。成功返回0,失败返回EOF


除了可以从标准IO流操作,也可以自定义流中操作:

int fgetc(FILE *stream)   int fputc(int character, FILE *stream)

int getc(FILE *stream)   int putc(int character, FILE *stream)

文件末尾返回EOF

撤销字符IO:

int ungetc(int character, FILE *stream);        把character压回stream流中

如果采用fseek、fsetpos、rewind函数改变流的位置,退回的字符将被丢弃。


未格式化的行IO只能简单读取或写入字符串,而格式化的行IO可以进行不同类型的转换。

char *fgets(char *buffer, int buffer_size, FILE *stream) 

char *gets(char* buffer)

错误返回NULL

int fputs(char const *buffer, FILE *stream)

int puts(char const *buffer)

错误返回EOF

buffer中都会包含一个NULL作为结尾,所以字符个数为buffer-1个

格式化行IO

int fscanf(FILE *stream, char const *format, ...) 从stream读

int scanf(char const *format, ...) 从标准IO

int sscanf(char const *string, char const *format,..) 从string中读

文件末尾返回EOF 


int fprintf(FILE *stream, char const *format, ...);

int printf(char const *format,...);

int sprintf(char *buffer, char const *format,...);//注意缓冲区溢出的事情,由于没有声明长度。


二进制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);


刷新和定位函数

int fflush(FILE *stream)刷新缓冲区       long ftell(FILE *stream)返回流当前的位置,即下一个读取或写入将要开始的位置距离文件起始位置的偏移量。

int fseek(FILE *stream, long offset, int from)

C语言 IO流操作

void rewind(FILE *stream)回到起始位置                 int fgetpos(FILE *stream, fpos_t *position)                int fsetpos(FILE* stream, fpos_t const *position);

大多数流都有缓冲区概念,并且大都是默认缓冲区状态为满的时候才刷新。