缓存:
系统缓存:内核空间
如cashe、buffer
I/O缓存:用户空间
我们通常所说的缓存其实是I/O缓存,刷新缓存也是将I/O缓存刷到系统缓存(还没有真正刷到磁盘),至于系统缓存何时刷到磁盘,是由操作系统决定的(也可以调用系统的api强制刷新)
常用I/O函数 是否带缓存:
这里的缓存就是I/O缓存,FILE结构体实际上开辟了一块用户空间的内存(猜测FILE中有个成员分量为指针,它指向了一块用户空间的内存)
刷新I/O缓存的情况:1.缓存满了 2.手动刷新fflush 3.遇到’\n’回车字符 4.程序结束(是否刷新分情况,图在下面)
- 用到FILE结构体(FILE实际上是对fd的封装)的,是带缓存(在用户空间)的
fopen、fclose;
printf、scanf;
fprintf、fscanf、fgets、fputs、fgetc、fputc、fwrite、fread - 直接用fd文件描述符,非缓存的
open、close;
getchar、putchar;
read、write - puts 最后一个字符是’\n’,一定会刷新I/O缓存
程序结束,终止函数和I/O缓存刷新情况: