错误报告函数: void perror( char const *message ); 头文件stdio.h
终止执行: void exit ( int status ); status = EXIT_SUCCESS和EXIT_FAILURE 头文件stdlib.h
MS-DOS和UNIX都支持采用 $program answer 的方式进行输入输出重定向。从文件data而不是键盘作为标准输入进行读取,标准输出写到文件answer而不是屏幕上。
FILENAME_MAX表示最长的文件名长度 FOPEN_MAX表示你能同时打开多少个文件
标准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)
void rewind(FILE *stream)回到起始位置 int fgetpos(FILE *stream, fpos_t *position) int fsetpos(FILE* stream, fpos_t const *position);
大多数流都有缓冲区概念,并且大都是默认缓冲区状态为满的时候才刷新。