总结C语言标准函数库中输入/输出的知识,即标准函数库中的一组I/O函数。
如果用系统调用,不同的系统就会有不同的API函数,如Linux上有create / open / close / read / write / lseek / access,Windows上有CreateFile / OpenFile等,这样不利于程序的可移植性,C函数库就是用来解决这个问题的,Windows上有Microsoft C Run-time Library (CRT),Linux上有glibc,不同的C函数库虽然不尽相同,但都遵循C语言的标准函数规范。
stdio
包含头文件:
#include <stdio.h>
流
FILE结构体用来封装流。
字节流分为:
- texxt
- binary
标准流:
- stdin
- stdout
- stderr
标准流不需要打开和关闭。
标准I/O常量:
- EOF
- FOPEN_MAX
- FILENAME_MAX
I/O函数
输入&输出
- 字符IO,处理单个字符系列: getchar / putchar , fgetc / fputc , getc / putc
- 行(非格式化&格式化)IO, 处理文本行系列: fgets / fputs , gets / puts , fscanf / sscanf / scanf, fprintf / sprintf / printf
- 二进制IO,处理二进制数据系列: fread / fwrite
处理字符和文本行(非格式化)输入,
如下,getc和getchar为宏定义
处理字符和文本行(格式化)输入
处理字符和文本行(非格式化)输出
处理字符和文本行(格式化)输出
二进制IO
不需要在数值和字符间转换,效率较高。
打开&关闭
- fopen系列
- fclose系列
刷新&定位
- fflush
- fseek, ftell
刷新
输入/输出操作的是被缓冲在内存中的字节流,此缓冲些只有在被写满时(多大的空间呢?)才会被真正写入到物理文件或者输出到设备中,当然可以手动强制将缓冲的数据刷新出去,即调用fflush函数,这个方法经常被用在printf函数后,让printf打印的那些Debug信息立即输出。
改变缓冲方式
定位
流状态检测
临时文件
- tmpfile
- tmpnamt
文件操作
e.g.
错误处理
e.g.
参考
《
Pointers On C》(第十五章)
C Specifications
- ISO/IEC 9899:2011 "Programming Languages. C" (The "C11");
- ISO/IEC 9899:1999 "Programming Languages. C" (The "C99");
- ISO/IEC 9899:1990 "Programming Languages. C" (The "C90").
C Textbooks
- Kernighan and Ritchie "The C Programming Language", 2nd ed, 1988, (The "K&R". The Bible for the C language).
- Plauger, "The Standard C Library", 1992.
Online References
- GNU GCC (GNU Compiler Collection) @ http://gcc.gnu.org, with source codes.