第五章具体介绍了标准I/O库的各类细节,要是一一列出来,有费精力且可能列不全,故只讲日常多用到的。
标准输入输出是由一大批函数组成的。数组
要记住,标准输入输出是有缓冲的,就是当缓冲区的数据满了的时候,才会调用read和write函数。而在第三章的时候,是立刻调用read和write函数的。安全
缓冲分为3种,全缓冲,行缓冲和无缓冲。跟终端相关的通常是行缓冲,而标准出错是无缓冲,文件读写的通常都是全缓冲。
改变缓冲模式的有两个函数,setbuf和setvbuf函数。我的感受setvbuf比较好用,具体实现请翻书。函数
打开一个流通常是用fopen函数,关闭一个流则是用fclose函数。字符串
读和写流分为几种,有用字符读写的,有用字符串的写的,还有读二进制文件的时候是一块块读写的。get
字符读写:读的是getc、fgetc和getchar函数。getchar(void)实际上就等于fgetc(stdin),而getc和fgetc的区别在于第一个可以做为宏,而第二个只能做为函数。这三个函数出错或者读到文件末尾(EOF)都会返回-1,那怎么区别呢?用ferror或者feof函数来区别。对应的就会有输出函数:putc函数、fputc函数和putchar函数。区别跟上述差很少。这么多个函数,通常我的认为只选定一种函数用就行,固然也要看状况。不过通常来讲,我读写字符的话就用fgetc和fputc吧。it
每次一行I/O:顾名思义,每次读取一行,就是当碰到换行符的时候就会输入或输出。读的是fgets和gets。强烈建议用fgets而不用gets函数,由于gets函数没有指定输入字符的个数,也就是有可能会形成溢出,不安全。fputs和puts就负责输出。两个函数的相同点就是输出一个以NULL结尾的字符串,可是区别就是puts将一个以NULL结尾的字符串写道标准输出,终止符不写出。可是puts而后又将一个换行符写道标准输出。就是若是用fputs函数的话,咱们就必须本身处理换行符(若是那个字符串不包括换行符的话)。终端
二进制I/O的话就是fread和fwrite函数了,没什么好说的,具体请翻书。二进制
定位流的话就用ftell和fseek组合,不过偏移值是长整型(不过应该不要紧吧)error
格式化输入输出的就是printf和scanf的函数族了。有不少变种函数,但都是格式化的。具体请翻书。数据
最后,我认为这笔记只是概况,有问题仍是要查书,看多了,就天然记住了。