檔案重定向
先來說說檔案:
當我們開啟乙個檔案時,作業系統為了管理該檔案,會建立乙個資料結構來描述它,記錄他的各種資訊,這個資料結構就是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...