setbuf函式使用注意事項

2puT發表於2016-07-10

程式輸出有兩種方式:一種是即時處理方式,另一種是先暫存起來,然後再大塊寫入的方式,前者往往造成較高的系統負擔。因此,c語言實現通常都允許程式設計師進行實際的寫操作之前控制產生的輸出資料量。

這種控制能力一般是通過庫函式setbuf實現的。如果buf是一個大小適當的字元陣列,那麼:

setbuf(stdout,buf);

語句將通知輸入/輸出庫,所有寫入到stdout的輸出都應該使用buf作為輸出緩衝區,直到buf緩衝區被填滿或者程式設計師直接呼叫fflush(譯註:對於由寫操作開啟的檔案,呼叫fflush將導致輸出緩衝區的內容被實際地寫入該檔案),buf緩衝區中的內容才實際寫入到stdout中。緩衝區的大小由系統標頭檔案<stdio.h>中的BUFSIZ定義

舉例說明如下(程式碼通過VS2008編譯)


#include <iostream>
#include<fstream>

int main(int argc, char* argv[])
{
    char* outbuf =  new char [100];
    setbuf(stdout,outbuf);//將輸出流繫結到outbuf上
    puts("helloworld\n");//內容輸入到outbuf內
    //setbuf(stdout,NULL);//如果啟用這行程式碼,輸出流恢復原來的狀態,puts輸出到控制檯
    delete[] outbuf;
    system("pause");
    return 0;

}

相關文章