1. 程式人生 > >stdin,stdout,stderr

stdin,stdout,stderr

 *標準輸入輸出流
#include <stdio.h>

extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

//man
1.stdin
*0;     //標準檔案描述符;
*標準輸入流;

2.stdout
*1;
*標準輸出流;

3.stderr
*2;
*標準錯誤輸出流



++++++++++(extend)
1.//man

Each  of these symbols is a stdio(3) macro of type pointer to FILE,
 and can be used with functions like fprintf(3) or fread(3).

2.//csdn

stderr與stdin,stdout一樣,是流。  
  具體就是:
 stdin是標準輸入流,預設為鍵盤,  
 stdout是標準輸出流,預設為螢幕,  
 stderr是標準錯誤流,一般把螢幕設為預設,  也可以輸出到檔案。   

3.//csdn

stdin,stdout可以重定向到檔案,stderr輸出到螢幕;  
  所以如果輸出錯誤訊息,不要用printf("error"),fprintf(stdout,   "error");  
  這是 因為訊息可能會被重定向到檔案;
  要用fprintf(stderr,   "error");
                
4.//百度知道

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!

5.//csdn

c的話,錯誤處理函式有assert,clearerr,dosexterr,ferror,harderr,hardresume,matherr,perror,strerror  
  舉個strerror的例子  
    #include   <stdio.h>  
    #include   <errno.h>  
    int   main(   void   )  
      {  
         char   *buffer;  
       /*傳一個表示檔案不存在的ENOENT給strerror函式*/  
         buffer   =   strerror(ENOENT);  
        /*輸出該ENOENT代表的錯誤資訊*/  
          printf("The   error   is   :%s",buffer);  
          return   0;
      }    
  執行結果:  
    The   error   is   :NO   such   file   or   directory  
      

6.//百度知道

請問:
當檔案指標fp返回NULL值而要提示出錯資訊時,
    為什麼用fprintf(stderr,"Error");比用printf("Error");更好?
    越詳細越好!謝謝各位了!

    提問者: Wave_Dan - 書生 二級
    最佳答案

    一般情況下,你這兩個語句執行的結果是相同的,沒有區別,只有一下情況才有區別:

    執行你的程式的時候,命令列上把輸出結果進行的轉向,比如使用下面的命令把你的程式a.c執行的結果轉向到記事本檔案a.txt:
    a.exe > a.txt

    在這樣的情況,如果使用printf輸出錯誤資訊,會儲存到a.txt檔案裡面,如果使用fprintf輸出錯誤,會顯示在螢幕上。

7.csdn

stderr,stdout  
  都是向終端輸出資料。  
     
    stderr,可以在編譯階段輸出。  
    stdout必須時在執行時刻。

8.