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