stdout和stderr标准输出的区别
stderr和stdout詳細解說
今天又查了一下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點即可!
總結
以上是生活随笔為你收集整理的stdout和stderr标准输出的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf会修改跨区服务器吗,dnf新跨区系
- 下一篇: C语言中Static和Const关键字的