wal*_*ala 5 c c++ buffer fflush
我知道这将是一个非常愚蠢的问题,但在阅读了很多关于整个"缓冲"系统的文档之后,我无法理解为什么人们会刷新流而不是缓冲区.
我见过人们写这样的东西:
FILE* file=fopen("mytext.txt","wr");
char buffer[10]="";
setbuf(file,buffer);
//do some stuff....
fflush(file);
....
fclose(file);
Run Code Online (Sandbox Code Playgroud)
所以我想知道,因为我们实际上将事物存储在缓冲区中,为什么我们要刷新与之关联的流而不是直接刷新缓冲区,这实际上存储了一些东西并且应该被刷新.(好吧,有些人告诉我,如果事情发生了就像我说的那样只会是同样的事情所以打扰自己......)
例如,我们不能写像.fflush(buffer)为什么?
刷新将数据从流的内部缓冲区复制到基础文件.
因此,刷新功能需要知道要复制的源和目标.
这取决于I/O实现,对于C++,<iostream>请参阅Jerry Coffin的答案 - 缓冲区<iostream>更加智能.
使用C风格<cstdio>,如果你想只刷一个参数,或者FILE*char数组需要知道它应该复制到的文件.
你的缓冲区是一个哑数组,它只存储读/写数据.由于那里没有附加信息,获取指向缓冲区的指针的函数无法知道目标在哪里写入 - 所以虚构的fflush调用看起来就像是fflush(buffer, file);哪个不会让你到处都是.另一方面,FILE*存储指向缓冲区的指针(使用setbuf(file,buffer)函数调用设置指针).
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |