多数与C语言输入输出相关的函数在<stdio.h>中定义(C++中的<cstdio>)。
常用总结,关于文件的各种使用另外单独学习:
1. 文件开关
fopen, fclose
2. 文件读写
fread, fwrite
3. 文件定位
ftell,fseek,rewind
4. 格式化输入输出
printf,fprintf,sprintf
5. 非格式化输入输出
getc/fgetc, putc/fputc,ungetc,fgets,fputs
6. 错误处理
feof, ferror
7. 文件操作
remove,rename,tmpfile
以下部分为转载:
1. 库变量
序号 | 变量 | 描述 |
---|---|---|
1 | size_t | 这是无符号整数类型,它是 sizeof 关键字的结果。 |
2 | FILE | 这是一个适合存储文件流信息的对象类型。 |
3 | fpos_t | 这是一个适合存储文件中任何位置的对象类型。 |
2. 宏定义
下面是头文件 stdio.h 中定义的宏:
序号 | 宏 | 描述 |
---|---|---|
1 | NULL | 这个宏是一个空指针常量的值 |
2 | _IOFBF、_IOLBF 和 _IONBF | 这些宏扩展了带有特定值的整型常量表达式,并适用于 setvbuf 函数的第三个参数。 |
3 | BUFSIZ | 这个宏是一个整数,该整数代表了 setbuf 函数使用的缓冲区大小。 |
4 | EOF | End-of-File |
5 | FOPEN_MAX | 这个宏是一个整数,该整数代表了系统可以同时打开的文件数量。 |
6 | FILENAME_MAX | 这个宏是一个整数,该整数代表了字符数组可以存储的文件名的最大长度。如果实现没有任何限制,则该值应为推荐的最大值。 |
7 | L_tmpnam | 这个宏是一个整数,该整数代表了字符数组可以存储的由 tmpnam 函数创建的临时文件名的最大长度。 |
8 | SEEK_CUR、SEEK_END 和 SEEK_SET | 这些宏是在These macros are used in the fseek 函数中使用,用于在一个文件中定位不同的位置。 |
9 | TMP_MAX | 这个宏是 tmpnam 函数可生成的独特文件名的最大数量。 |
10 | stderr、stdin 和 stdout | 这些宏是指向 FILE 类型的指针,分别对应于标准错误、标准输入和标准输出流。 |
3. 库函数
3.1 Operations on files:
序号 | 函数 | 描述 | 补充描述 |
---|---|---|---|
1 | int remove ( const char * filename ); | Deletes the file whose name is specified in filename.(永久删除文件) | 操作成功,返回0,否则返回非零 |
2 | int rename ( const char * oldname, const char * newname ); | Changes the name of the file or directory specified by oldname to newname. | 同上 |
3 | FILE * tmpfile ( void ); | 以二进制更新模式(wb+)创建临时文件 | 成功,返回临时文件, failure, NULL is returned. |
4 | char * tmpnam ( char * str ); | 生成并返回一个有效的临时文件名,该文件名之前是不存在的。 | 成功,返回文件名,失败,返回NULL |
3.2 File access:
序号 | 函数 | 描述 | 补充描述 |
---|---|---|---|
1 | int fclose ( FILE * stream ); | 关闭流 stream。刷新所有的缓冲区。 | success,return 0,fail,return EOF |
2 | FILE * fopen ( const char * filename, const char * mode ); | 使用给定的模式 mode 打开 filename 所指向的文件 | success,return FILE*,fail,return NULL |
3 | FILE * freopen ( const char * filename, const char * mode, FILE * stream ); | 把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。 | 同上 |
4 | int fflush ( FILE * stream ); | 刷新流 stream 的输出缓冲区。 | 成功,返回0,失败返回EOF |
5 | void setbuf ( FILE * stream, char * buffer ); | 自定义控制流的缓冲 | |
6 | int setvbuf ( FILE * stream, char * buffer, int mode, size_t size ); | 自定义缓冲流及缓冲模式 | 成功,返回0,失败返回非零 |
3.3 Formatted input/output:
序号 | 标签 | 函数原语 | 描述 | 补充描述 |
---|---|---|---|---|
1 | fprintf | int fprintf ( FILE * stream, const char * format, … ); | 格式化输出到指定流 | 成功,返回写入的字符总数,否则返回负数 |
2 | printf | int printf ( const char * format, … ); | 格式化输出到标准输出流stdout | 成功,返回写入的字符总数,否则返回负数 |
3 | sprintf | int sprintf ( char * str, const char * format, … ); | 格式化输出到字符串缓冲区,并自动在末尾添加字符串结尾标识符’\0’ | 成功,返回写入的字符总数(不包括自动添加的’\0’),否则,返回负数 |
4 | snprintf(C99) | int snprintf ( char * s, size_t n, const char * format, … ); | 格式化输出到字符串缓冲区,并自动在末尾添加字符串结尾标识符’\0’(设置单词最大写入字符个数) | 成功,返回写入的字符总数(不包括自动添加的’\0’),否则,返回负数 |
5 | fscanf | int fscanf ( FILE * stream, const char * format, … ); | Read formatted data from stream | 成功,返回成功填充的变量总数,失败返回EOF |
6 | scanf | int scanf ( const char * format, … ); | Read formatted data from stdin | 同上 |
7 | sscanf | int sscanf ( const char * s, const char * format, …); | Read formatted data from string | 同上 |
可变参数操作函数:
序号 | 标签 | 描述 |
---|---|---|
1 | vfprintf | Write formatted data from variable argument list to stream |
2 | vfscanf | Read formatted data from stream into variable argument list |
3 | vprintf | Print formatted data from variable argument list to stdout |
4 | vscanf | Read formatted data into variable argument list |
5 | vsnprintf | Write formatted data from variable argument list to sized buffer |
6 | vsprintf | Write formatted data from variable argument list to string |
7 | vsscanf | Read formatted data from string into variable argument list |
3.4 Character input/output:
序号 | 标签 | 函数原语 | 描述 | 补充描述 |
---|---|---|---|---|
1 | fgetc | int fgetc ( FILE * stream ); | Get character from stream | 成功,返回字符的ASCII码,否则返回EOF |
2 | getc | int getc ( FILE * stream ); | 同上 | getc and fgetc are equivalent, except that getc may be implemented as a macro in some libraries |
3 | getchar | int getchar ( void ); | Get character from stdin | 成功,返回字符的ASCII码,否则返回EOF |
4 | fgets | char * fgets ( char * str, int num, FILE * stream ); | Get string from stream | 从fp指向的文件中读取下一个输入行(包括换行符),并将它存放在字符数组中,最多可以读取maxline-1个字符,读取的行以’\0’结尾,不安全 |
5 | gets | char * gets ( char * str ); | Get string from stdin | 读取字符串,欲换行符’\n’结束,并删除换行符,用fgets代替 |
6 | fputc | int fputc ( int character, FILE * stream ); | Write character to stream | 成功,返回写入的字符,失败,返回EOF |
7 | putc | int putc ( int character, FILE * stream ); | 同上 | putc and fputc are equivalent, except that putc may be implemented as a macro in some libraries |
8 | putchar | int putchar ( int character ); | Write character to stdout | 同上 |
9 | fputs | int fputs ( const char * str, FILE * stream ); | Write string to stream | 成功,返回非负数,失败,返回EOF |
10 | puts | int puts ( const char * str ); | Write string to stdout(每行末尾自动添加换行符) | 同上 |
11 | ungetc | int ungetc ( int character, FILE * stream ); | 使字符c(转化为uchar型)被压入到指定输入流 | 成功,返回压入的字符,失败,返回EOF |
3.5 Direct input/output:
序号 | 标签 | 函数原语 | 描述 | 补充描述 |
---|---|---|---|---|
1 | fread | size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); | Read block of data from stream | 成功,返回读取的元素总数,失败,返回0(可以用feof或ferror工具判断是出现错误还是到文件末尾) |
2 | fwrite | size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); | Write block of data to stream | 返回实际写入元素的个数,正常情况返回值等于count |
3.6 File positioning:
序号 | 标签 | 函数原语 | 描述 | 补充描述 |
---|---|---|---|---|
1 | fgetpos | int fgetpos ( FILE * stream, fpos_t * pos ); | Get current position in stream | 成功,返回0 ,否则返回非零 |
2 | fsetpos | int fsetpos ( FILE * stream, const fpos_t * pos ); | 根据*pos中的位置设置当前文件的位置 | 同上 |
3 | fseek | int fseek ( FILE * stream, long int offset, int origin ); | 重定位文件位置以便随机stream流 | 同上 |
4 | ftell | long int ftell ( FILE * stream ); | 返回当前流中的位置(同fgetpos) | 但其返回long int(小型文件),大型文件用fgetpos |
5 | rewind | void rewind ( FILE * stream ); | 把流重置为起始位置 | 相当于 fseek(stream,0L,SEEK_SET) |
3.7 Error-handling:
序号 | 标签 | 函数原语 | 描述 | 补充描述 |
---|---|---|---|---|
1 | clearerr | void clearerr ( FILE * stream ); | Resets both the error and the eof indicators of the stream | |
2 | feof | int feof ( FILE * stream ); | 检测是否到达文件尾 | 到达结尾,返回非零,否则返回0 |
3 | ferror | int ferror ( FILE * stream ); | 返回流的错误状态 | 若错误标志被设置,返回非零,否则返回0 |
4 | perror | void perror ( const char * str ); | 打印错误信息至stderr |
参考:http://www.cplusplus.com/reference/cstdio/
《C标准库》,P.J. Plauger 著
《C语言参考手册》,Samuel P. Harbison III 等著