程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> iostream-C++中一個關於_bufsize的難題?

iostream-C++中一個關於_bufsize的難題?

編輯:編程解疑
C++中一個關於_bufsize的難題?

最近在研究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);
    }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved