stdout和stderr標準輸出的區別
今天又查了一下fprintf,其中對第一個引數stderr特別感興趣。
int fprintf(FILE *stream,char *format,[argument]);
在此之前先區分一下:printf,sprintf,fprintf。
1,printf就是標準輸出,在螢幕上打印出一段字串來。
2,sprintf就是把格式化的資料寫入到某個字串中。返回值字串的長度。
3,fprintf是用於檔案操作。
原型:int fprintf(FILE *stream,char *format,[argument]);
功能:fprintf()函式根據指定的format(格式)傳送資訊(引數)到由stream(流)指定的檔案.因此fprintf()可以使得資訊輸出到指 定的檔案。
例子:
char name[20] = "lucy";
FILE *out;
out = fopen( "output.txt", "w" );
if( out != NULL )
fprintf( out, "Hello %s\n", name );
返回值:若成功則返回輸出字元數,若輸出出錯則返回負值。
好了,以上到此為止。
然後深挖stdout,stderr。
stdout, stdin, stderr的中文名字分別是標準輸出,標準輸入和標準錯誤。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////今天時間倉促,以下摘自
http://blog.sina.com.cn/s/blog_912673ce01013qq9.html(十分感謝)
1,我們知道,標準輸出和標準錯誤預設都是將資訊輸出到終端上,那麼他們有什麼區別呢?讓我們來看個題目:
問題:下面程式的輸出是什麼?(intel筆試2011)
int main(){
fprintf(stdout,"Hello ");
fprintf(stderr,"World!");
return0;
}
解答:這段程式碼的輸出是什麼呢?你可以快速的將程式碼敲入你電腦上(當然,拷貝更快),然後發現輸出是
World!Hello
這是為什麼呢?在預設情況下,stdout是行緩衝的,他的輸出會放在一個buffer裡面,只有到換行的時候,才會輸出到螢幕。而stderr是無緩衝的,會直接輸出,舉例來說就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者會憋住,直到遇到新行才會一起輸出。而printf(stderr, "xxxxx"),不管有麼有\n,都輸出。
2,fprintf(stderr, "Can't open it!\n");
fprintf(stdout, "Can't open it!\n");
printf("Can't open it!\n");
這3句效果不是一樣啊,有什麼區別嗎?
有區別。
stdout -- 標準輸出裝置 (printf("..")) 同 stdout。
stderr -- 標準錯誤輸出裝置
兩者預設向螢幕輸出。
但如果用轉向標準輸出到磁碟檔案,則可看出兩者區別。stdout輸出到磁碟檔案,stderr在螢幕。
例如:
my.exe
Can't open it!
Can't open it!
Can't open it!
轉向標準輸出到磁碟檔案tmp.txt
my.exe > tmp.txt
Can't open it!
用TYPE 看 tmp.txt的內容:
TYPE tmp.txt
Can't open it!
Can't open it!
總結:注意1,點,2點即可!