Linux 文件IO理解
linux文件IO操作可以分为两种:
1.带缓存的文件IO操作,包括fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等
2.不带缓存的文件IO操作,包括open, close, read, write, getc, getchar, putc, putchar 等
两者的区别:
1.带缓存的io操作是在标准C里面定义的(可移植),而不带缓存的io操作是POSIX中定义的(不可移植),属于系统调用。带缓存的实际上是在不带缓存的基础之上
封装了一层,维护了一个输入输出缓冲区,使之能跨OS,成为ASCI标准。
2.fread一次可以读一个结构,read在linux/unix中读二进制与普通文件没有区别。
3.fopen返回的是文件流,open返回的是文件描述符。设备文件不可以当成流式文件来用,只能用open,而在linux/unix中任何设备都是文件,都可以用open,read
等
另外,标准io又提供了3种不同方式的缓冲
1.全缓冲。即缓冲区被写满或是调用fflush后,数据才会被写入磁盘。
2.行缓冲。即缓冲区被写满或是遇到换行符时,才会进行实际的io操作。当流涉及一个终端时(标准输入和标准输出),通常使用行缓冲。
3.不缓冲 。标准io库不对字符进行缓存处理。标准出错流stderr往往是不带缓存的,使得出错信息可以尽快显示出来。