標準輸入 (stdin)
標準輸入是指數據(通常是文件)走向程序。程序要求數據傳輸使用讀的運算。並非所有程序都要求輸入。如dir或ls程序(顯示一個目錄中的文件名)運行時不用任何輸入。
標準輸入的文件描述子爲 0 (零)。POSIX <unistd.h> 定義是 STDIN_FILENO;相對應的 <stdio.h> 變量爲 FILE* stdin ;類似地, <iostream> 變量爲 std::cin 。
標準輸出 (stdout)
標準輸入是指程序寫輸出數據的流。程序要求數據傳輸使用寫的運算。並非所有程序都要求輸出。如mv或ren程序在成功完成時是沉默的。
標準輸出的文件描述子爲 1 (一)。POSIX <unistd.h> 定義是 STDOUT_FILENO;相對應的 <stdio.h> 變量爲 FILE* stdout;類似地, <iostream> 變量爲 std::cout 。
標準錯誤輸出 (stderr)
標準錯誤輸出是另一個輸出流,典型用於程序輸出錯誤消息或診斷。它是獨立於標準輸出的流且可以分別導向。通常目的地爲終端。標準錯誤輸出是另一輸出流,用於輸出錯誤消息或診斷。它獨立於標準輸出,且可以分別被重導。常見的目的則爲啓始這個程序的終端,即使其標準輸出被重導亦如此。例如:一個管線中的程序的輸出被重導到下一個程序,但錯誤消息仍然直接流向文字終端機。
把標準輸出和標準錯誤輸出導到相同的目的,如文字終端,是可以(且正常)的。消息會以如同程序寫入的順序來出現,除非有用到緩衝。(例如,一個常見狀況是,當標準錯誤流是未使用緩衝,但標準輸出流是有使用的;在這情況下,如果標準輸出的緩衝器還沒滿的話,較慢寫到標準錯誤的文字可能會較早出現在終端。
標準錯誤輸出的文件描述子爲 2 ;POSIX <unistd.h> 定義爲 STDERR_FILENO;相對的 <stdio.h> 變量 FILE* stderr。C++<iostream> 標準頭文件提供兩個相關的變量: std::cerr 和 std::clog,前者用於無緩衝的而後者使用和其它 C++ 流相同的緩衝機制。
以上是維基百科對於標準流的解釋。
主要區別:
1、數據類型不一致
stdin等類型爲 FILE *STDIN_FILENO等類型爲 int
使用stdin的函數主要有:fread、fwrite、fclose等,基本上都以f開頭
使用STDIN_FILENO的函數有:read、write、close等
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
STDIN_FILENO等屬於系統API接口庫,其聲明爲 int 型,是一個打開文件句柄,對應的函數主要包括 open/read/write/close 等系統級調用。
關係:
對於stdin等可以使用fileno()函數(用來取得參數stream指定的文件流所使用的文件描述符)來取得該文件流對應的文件描述符。