最近在研究I/O緩沖,發現了一個問題,在網上搜了很久都沒有答案。
先上代碼:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
printf("stdout buffer total size: %d\n",stdout->_bufsiz);
printf("stdout buffer used size: %d\n",stdout->_cnt);
cout<<"asdf";
printf("stdout buffer total size: %d\n",stdout->_bufsiz);
printf("stdout buffer used size: %d\n",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);
}