C之I/O

总结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语言的标准函数规范。

C之I/O_第1张图片

stdio

包含头文件:

#include <stdio.h>



FILE结构体用来封装流。


字节流分为:

  1. texxt
  2. binary

标准流:

  • stdin
  • stdout
  • stderr
标准流不需要打开和关闭。

标准I/O常量:

  • EOF
  • FOPEN_MAX
  • FILENAME_MAX

I/O函数

输入&输出

  1. 字符IO,处理单个字符系列: getchar / putchar , fgetc / fputc , getc / putc
  2. 行(非格式化&格式化)IO, 处理文本行系列: fgets / fputs , gets / puts ,  fscanf  / sscanf / scanf, fprintf  / sprintf / printf
  3. 二进制IO,处理二进制数据系列: fread / fwrite
C之I/O_第2张图片

处理字符和文本行(非格式化)输入,

如下,getc和getchar为宏定义

C之I/O_第3张图片

处理字符和文本行(格式化)输入

C之I/O_第4张图片

处理字符和文本行(非格式化)输出


处理字符和文本行(格式化)输出


二进制IO

不需要在数值和字符间转换,效率较高。
C之I/O_第5张图片

打开&关闭

  1. fopen系列
  2. fclose系列


C之I/O_第6张图片

刷新&定位

  1. fflush
  2. fseek, ftell

刷新

输入/输出操作的是被缓冲在内存中的字节流,此缓冲些只有在被写满时(多大的空间呢?)才会被真正写入到物理文件或者输出到设备中,当然可以手动强制将缓冲的数据刷新出去,即调用fflush函数,这个方法经常被用在printf函数后,让printf打印的那些Debug信息立即输出。

C之I/O_第7张图片

改变缓冲方式

C之I/O_第8张图片

定位


流状态检测


临时文件

  1. tmpfile
  2. tmpnamt
C之I/O_第9张图片

C之I/O_第10张图片

文件操作



C之I/O_第11张图片

e.g.
C之I/O_第12张图片

错误处理

C之I/O_第13张图片

C之I/O_第14张图片

e.g.


参考

《 Pointers On C》(第十五章)
C Specifications
  1. ISO/IEC 9899:2011 "Programming Languages. C" (The "C11");
  2. ISO/IEC 9899:1999 "Programming Languages. C" (The "C99");
  3. ISO/IEC 9899:1990 "Programming Languages. C" (The "C90").
C Textbooks
  1. Kernighan and Ritchie "The C Programming Language", 2nd ed, 1988, (The "K&R". The Bible for the C language).
  2. Plauger, "The Standard C Library", 1992.
Online References
  1. GNU GCC (GNU Compiler Collection) @ http://gcc.gnu.org, with source codes.


你可能感兴趣的:(IO,C语言)