c++的ofstream输出机制问题,请教懂的人
ofstream outfile;outfile.open("test.txt");
while(1)
{
outfile << "i love fishc.com";
}
问题:i love fishc.com 是一次一次的输入到test.txt中,还是先集齐一定量(eg.1M)的i love fishc.com 到某个缓冲里面,然后输入一次到test.txt中?或者是其他的机制?(为了紧凑说明,请忽略代码细节上的问题)。 貌似是有一个缓冲区的,大小大概是1M。所以超过的时候,就卡在那里不动了 当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。
当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:
当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。
控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。
明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败
页:
[1]