Linux 檔案描述符,檔案重定向

2021-08-29 18:41:56 字數 1559 閱讀 9989

檔案重定向

先來說說檔案:

當我們開啟乙個檔案時,作業系統為了管理該檔案,會建立乙個資料結構來描述它,記錄他的各種資訊,這個資料結構就是file結構體,乙個file結構體就表示了乙個已經開啟的檔案。

程序中使用open函式開啟某個檔案,前提是需要我們將程序與檔案聯絡起來。所以程序pcb中就有乙個* files指標,這個*files指標指向乙個陣列files_struct,陣列內每個元素都對應了乙個檔案指標,檔案指標指向各個file結構體。

而檔案描述符就是這個陣列的下標,根據陣列的下標可以找到對應的檔案指標,也就能操作檔案了。

說的話可能可能還不夠清楚,我們直接上圖:

當程序中要對檔案進行操作時,就會從程序pcb中讀取*files指標,找到對應的檔案表files_struct,再通過檔案描述符找到陣列對應的檔案指標,對檔案進行操作。

根據上圖,我們發現,陣列下標0,1,2對應了標準輸入,標準輸出,標準錯誤輸出,這並不是偶然,每乙個檔案開啟時都會自動產生3個預設的檔案描述符「標準輸入,標準輸出,標準錯誤輸出」,且順序為0,1,2.

在新開啟檔案時,檔案描述符的分配原則是:優先用未被使用的最小描述符.

先來看一段**:

#include#include#include#include#includeint main()

printf("fd: %d\n",fd);

fflush(stdout);

}close(fd);

exit(0);

}

我們發現,本應該寫到螢幕上的fd,卻寫入到了test.txt檔案中,這就是檔案重定向.

先上圖:

**中先是關閉了1號描述符,也就是標準輸出,而後開啟test.txt檔案,根據分配規則,test.txt的檔案描述符為1,當再次使用檔案描述符輸出時,本應該輸出到螢幕的文字就寫入到test.txt中了.

與命令列搭配使用:

標準輸入重定向定義: 原本從標準輸入讀取資料重新定向為從其他檔案讀取資料

標準輸出重定向定義: 將原來要輸出到標準輸出的內容,重定向後輸出到指定的其他檔案

<       標準輸入重定向

> 標準輸出重定向 清空原有內容後新增新內容

>> 標準輸出重定向 向原有內容下方新增新內容

ls >/dev/null 2>&1標準輸出(1)重定向為/dev/null 標準錯誤輸出(2)指向(1)(也指向/dev/null)

ls 2>&1 /dev/null標準錯誤輸出(2)重定向為標準輸出(1),標準輸出(1)重定向為/dev/null

在**中使用

Linux 檔案描述符和重定向

1.預備知識 標準輸入 stdin 標準輸出 stdout 和標準錯誤 stderr 是編寫指令碼的時候經常使用的,因為輸出的資訊可能是上述的一種。檔案描述符 是與開啟的某個檔案或者資料流相關聯的整數。檔案描述符0,1,2是系統預留的。2.例項echo this is a sample.temp.t...

linux 檔案描述符和重定向

檔案描述符系統自帶了3個,分別是 0 輸入 1 輸出,預設,省略 2 錯誤輸出重定向一般是 或者 bin bash ls 列印在console,內容如下 root localhost ccc test.sh ls 111.txt 這條命令的結果並沒有列印到控制台上,而是儲存到111.txt裡 ls ...

Linux 檔案描述符fd 重定向

在學習檔案描述符之前,我們先來看一點其它相關的知識點。我們都知道,對乙個檔案我們可以進行開啟 讀 寫 關閉操作,在我們沒有接觸linux之前,將資訊輸出到顯示器上,我們通常能想到的方法有以下幾種 include include intmain c語言會預設幫我們開啟stdin stdout stde...