2019.9.5C++基礎學習筆記——stdout與stderr

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

stdout/stderr解說

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章