1. 程式人生 > 其它 >LVGL task任務系統(3)

LVGL task任務系統(3)

檔案描述符

每個程序擁有自己的標準輸入流、標準輸出流、標準錯誤流。這幾個標準流說起來很複雜,但其實都是檔案。

  • 標準輸入流(用 0 表示)可以作為程序執行的上下文(程序執行可以從輸入流中獲取資料)。
  • 標準輸出流(用 1 表示)中寫入的結果會被列印到螢幕上。
  • 如果程序在執行過程中發生異常,那麼異常資訊會被記錄到標準錯誤流(用 2 表示)中。

例子

看一個例子,比如我們輸入:

ls1 > out

結果並不會存入out檔案,因為ls1指令是不存在的。結果會輸出到標準錯誤流中,仍然在螢幕上。這裡我們可以把標準錯誤流也重定向到標準輸出流,然後再重定向到檔案。

ls1 &> out

這個寫法等價於:

ls1 > out 2>&1

2>&1的含義

2>&1表明將檔案描述2(標準錯誤輸出)的內容重定向到檔案描述符1(標準輸出),為什麼1前面需要&?當沒有&時,1會被認為是一個普通的檔案,有&表示重定向的目標不是一個檔案,而是一個檔案描述符。

為何2>&1要寫在後面?

command > file 2>&1
首先是command > file將標準輸出重定向到file中, 2>&1 是標準錯誤拷貝了標準輸出的行為,也就是同樣被重定向到file中,最終結果就是標準輸出和錯誤都被重定向到file中。

command 2>&1 >file
2>&1 標準錯誤拷貝了標準輸出的行為,但此時標準輸出還是在終端。>file 後輸出才被重定向到file,但標準錯誤仍然保持在終端。

測試