C++基礎學習筆記——stdout與stderr
今天寫C++數據庫接口時看到了代碼如下:
fprintf( stderr , "錯誤原因:%d\n",mysql_error( &mysql ));
由此瞭解一下fprintf函數中第一個參數stdout與stderr。
fprintf()函數
一般C++輸出除了std::cout外,還有printf(),sprintf()和fprintf()這三種。
**printf()**就是標準輸出,在屏幕上打印出一段字符串來。
**sprintf()**就是把格式化的數據寫入到某個字符串中。返回值字符串的長度。
**fprintf()**是用於文件操作。
原型:int fprintf(FILE *stream,char *format,[argument]);
功能:fprintf()函數根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件.因此fprintf()可以使得信息輸出到指定的文件。
fprintf()函數一般用於輸出到文件流操作,操作實例如下:
char buff[20] = "test message" ;
FILE* pfile;
pfile = fopen( "test.txt" , "w" );
if(pfile != NULL)
{
fprintf( pfile , "寫入信息:%s\n",buff );
}
**fprintf()**函數的第一個參數一般用於指定將要輸出到的文件流,但是這個參數可以被設置爲“stdout”和“stderr”這兩個關鍵字。
stdout / stderr關鍵字
stdout關鍵字代表標準輸出,stderr代表標準錯誤。當fprintf()函數的參數設置爲stdout或stderr時,一般都是將後面的信息輸出到屏幕上,除去文件操作與printf()沒太大區別。
但是,參數stdout和stderr在機制上有很大區別,stdout的標準輸出對象設置爲行緩衝模式,即數據寫滿一行或有‘\n’換行符時從緩衝區輸出數據,而stderr無緩衝區,其指向的就是輸出設備(屏幕),所以兩條代碼相比下來如果沒有換行符‘\n’,stderr參數的輸出指令比stdout參數的要快。
實例:
fprintf( stdout , "輸出信息:stdout" );
fprintf( stderr , "輸出信息:stderr\n" );
輸出結果:
輸出信息:stderr
輸出信息:stdout
fprintf( stdout , "輸出信息:stdout\n" ); //加了換行符,行緩衝觸發,直接輸出
fprintf( stderr , "輸出信息:stderr\n");
輸出結果:
輸出信息:stdout
輸出信息:stderr