问题描述
- C++中一个关于_bufsize的难题?
-
最近在研究I/O缓冲,发现了一个问题,在网上搜了很久都没有答案。
先上代码:#include<iostream> #include<stdio.h> using namespace std; int main(){ printf("stdout buffer total size: %d ",stdout->_bufsiz); printf("stdout buffer used size: %d ",stdout->_cnt); cout<<"asdf"; printf("stdout buffer total size: %d ",stdout->_bufsiz); printf("stdout buffer used size: %d ",stdout->_cnt); return 0; }
问题:
1、为什么stdout->_bufsize会为0呢?不是说是4096吗??
2、cout<<"asdf",这行代码没有endl,按道理是不会强制刷新输出缓冲区的,但是为什么在第二次打印stdout->_cnt的时候,仍然为0呢?我知道很多时候,因为系统对缓冲区的自我检查,导致有没有endl,基本上效果是一样的,但是我就是想知道有没有一段代码可以证明有enld和没有endl的区别?太想知道了!!
谢谢各路大神帮忙!
解决方案
用setbuf更改缓冲的类型试试
char *a = (char *)malloc(50);
setbuf(stdout, a);
int i = 1;
while(i++){
cout << 1;
if(i % 10 == 0)
fflush(stdout);
Sleep(100);
}
解决方案二:
一个难题
MySQL中的一个难题
解决方案三:
答案是你的速度太慢了,stdout的对象为命令行时很快就执行完成了。
时间: 2024-08-22 15:07:52