缓冲输入输出
基于流的操作最终都会调用read或write进行操作。即流的内部封装了这两个系统调用。
缓冲分如下三种:
全缓冲(相应宏_IO_FULL_BUF):直到缓冲区被填满,菜调用系统I/O函数。磁盘文件读写通常是全缓冲的。
行缓冲(相应宏_IO_LINE_BUF):直到遇到换行符'\n',才调用系统I/O函数。标准输入输出都是行缓冲的。
无缓冲(相应宏_IO_UNBUFFERED):没有缓冲,数据立即读入或输出到外存文件和设备上。例如标准出错。
对于写操作的缓冲都比较好理解,我现在对读操作的缓冲很迷糊,比如全缓冲,读的时候到底什么时候进行实际的读,是当待读的内容达到缓冲区大小吗?
再比如行缓冲,遇到换行符才进行实际读,如果实际上没读,又怎么知道有没有遇到换行符呢?