Linux - 標準 I/O 流



標準 I/O 流指的是以下三個預設由任何 Linux 或 Unix 系統提供的流。

  • 標準輸入流 (Stdin)
  • 標準輸出流 (Stdout)
  • 標準錯誤流 (Stderr)
Linux - Standard I/O Streams

如前所述,在 Linux 中,一切皆為檔案。例如目錄、普通檔案,甚至裝置都被視為特殊檔案。每個檔案都有一個關聯的數字,稱為檔案描述符或簡稱 FD,此 FD 用於對關聯檔案執行任何輸入或輸出操作。

Stdin、Stdout 和 Stderr 指的是終端螢幕,它們的檔案描述符分別為 0、1 和 2。

標準輸入流 (Stdin)

這被稱為標準輸入,關聯的檔案描述符為 0。它也表示為 **STDIN**。Linux 程式將從 STDIN 讀取預設輸入。實際上,STDIN 指的是計算機螢幕。

大多數 Linux 命令都支援標準 Stdin 流,這意味著我們可以使用 STDIN 將資料直接饋送到程式,而不是使用檔案或命令列輸入。

例如,cat 命令將從螢幕讀取輸入。鍵入以下命令並開始輸入內容,如下所示

$ cat
This is text which I'm feeding using STDIN directly.
This is text which I'm feeding using STDIN directly.

$

這裡 cat 命令接收標準輸入,當您使用 Enter 鍵轉到下一行或使用 CTRL+D 退出時,它會將相同的輸入列印到顯示器上,即您的標準輸出。

當您編寫 C、C++ 或 Java 程式並將其暫停以從螢幕讀取一些輸入時,Stdin 流用於從輸入螢幕讀取資料。您可以使用輸入重定向運算子 < 將資料傳送到 Stdin,如下所示

$ cat < inputfile.txt
This is text which I'm feeding using STDIN directly.


$

上述命令從 inputfile.txt 讀取輸入並將其重定向到 Stdin,最終饋送到 cat 程式以在螢幕上顯示。

標準輸出流 (Stdout)

這被稱為標準輸出,關聯的檔案描述符為 1。它也表示為 STDOUT。Linux 程式將在 STDOUT 寫入預設輸出。

每當執行 Linux 程式時,其輸出都會發送到計算機螢幕的檔案描述符,然後您可以在顯示屏上看到它。或者,您可以將程式輸出傳送到任何檔案以儲存或傳送到任何印表機以列印。

以下命令將輸出傳送到 Stdout,以便它可以在您的螢幕上顯示

$ ls -l
total 8
-rw-r--r-- 2 root root 132 May  1 07:18 filename
-rw-r--r-- 2 root root 132 May  1 07:18 hardlink
lrwxrwxrwx 1 root root   8 May  1 07:17 symlink -> filename

$

您可以使用輸出重定向運算子 > 將輸出重定向到儲存在 output.txt 檔案中,如下所示

$ ls -l > output.txt


$

或者您可以使用以下命令

$ ls -l 1 > output.txt


$

現在螢幕上不會顯示任何輸出。這裡我們提到 1 > output.txt,這意味著 Stdout 應重定向到 output.txt 檔案。系統預設將其視為 Stdout。下一節將區分 Stdout 和 Stderr。

標準錯誤流 (Stderr)

這被稱為標準錯誤,關聯的檔案描述符為 2。它也表示為 STDERR。Linux 程式將在 STDERR 寫入所有錯誤訊息。

預設情況下,STDERR 是您的顯示螢幕,但與標準輸出一樣,它可以重定向到檔案以儲存錯誤訊息。

讓我們嘗試使用不存在的檔名的相同 cat 命令

$ cat  nonexist.txt
cat: nonexist.txt: No such file or directory

$

這裡 **nonexist.txt** 檔案不存在,因此預設情況下,螢幕上會顯示錯誤訊息作為 stderr。

您可以使用檔案描述符 2 儲存此錯誤訊息,如下所示

$ cat  nonexist.txt 2>err

$

這次您的錯誤訊息儲存在 err 檔案中。

廣告