關於重定向,看完你就懂了

2021-09-26 20:24:51 字數 1690 閱讀 3278

例子

對於不理解的同學,可以先直接執行乙個demo,看看具體有什麼區別,我們從結果來進行分析。

#include#includeint main()

之後進行編譯,再測試:

從結果我們可以看出,a.out > outfile 2>&1將標準輸出和錯誤輸出都重定向到了outfile檔案中;a.out 2>&1 > outfile將錯誤輸出輸出到終端,標準輸出到outfile中。(細心的同學可能對第乙個輸出的順序感到奇怪,有興趣的可以了解一下延遲寫的概念)

分析首先我們需要了解到linux中如何將檔案描述符和磁碟上的檔案進行關聯的。

在程序中,會將每乙個檔案描述符進行記錄,將對應的檔案描述符指向乙個檔案表項。該檔案表項儲存的是檔案的狀態標誌(唯讀,只寫,可讀可寫)和偏移量等資訊,v節點指標指向乙個v節點表項。你可以認為這個v節點表項就是我們磁碟上的具體檔案了。

因此你要知道linux中檔案描述符檔案表項v節點表項相關聯的。

shell為我們做了那些事情?

我們知道程序中的檔案描述符0,1,2。一般都是標準輸入和標準輸出,錯誤輸出的介面。這些其實都是shell為我們做的配置。它將這三個檔案描述符都指向了終端檔案表項。才會出現我們的標準輸入,標準輸出,錯誤輸出都是從終端獲取和輸出。

a.out > outfile 做了哪些事?

我們知道 該語句的效果就是將 a.out 標準輸出重定向到 outfile中。但是從**上做了哪些操作呢?將標準輸出檔案描述符改1指向outfile的檔案表項。而outfile的檔案表項中的v節點肯定指向磁碟中的outfile檔案。所以最終會輸出到outfile檔案中。

fd1>&fd2 是什麼意思?

linux中表示將fd1的檔案指標指向fd2的檔案指標指向的檔案表項。

了解以上的知識點以及shell是從左往右進行解析,大概就知道a.out > outfile 2>&1a.out 2>&1 > outfile的區別了。

a.out > outfile 2>&1

a.out > outfile ,表示將 檔案描述符1指向outfile的檔案表項。 2>&1 ,表示將檔案描述符2指向檔案描述符1指向檔案表項(此時,檔案描述符1指向outfile檔案表項)。因此a.out 的錯誤輸出和標準輸出都會輸出到outfile檔案中。

a.out 2>&1 > outfile

a.out > 2>&1 ,表示將檔案描述符2指向檔案描述符1指向的檔案表項(此時,檔案描述符符1指向終端的檔案表項)。 > outfile ,表述將檔案描述符1指向outfile的檔案表項。因此,標準輸出會輸出到outfile中。錯誤輸出會輸出到終端

為什麼要有網域名稱,看完你就懂了。

網域名稱是 的位址,容易記住 方便訪客下次訪問 最早的網際網路是沒有網域名稱的,都是通過ip訪問,包括現在還有不少 也是直接輸入ip就可以訪問。在web伺服器上,也都可以設定直接輸入ip訪問 這個功能並沒有消失,但通過網域名稱訪問 比ip要有很多優點,詳細的如下 第一 好記,網域名稱比ip位址要好記...

Nginx可以做什麼?看完這篇你就懂了

nginx能做什麼 反向 負載均衡 http伺服器 動靜分離 正向 以上就是我了解到的nginx在不依賴第三方模組能處理的事情,下面詳細說明每種功能怎麼做。下面貼上一段簡單的實現反向 的 server 儲存配置檔案後啟動nginx,這樣當我們訪問localhost的時候,就相當於訪問localhos...

關於重定向

標準輸入的控制 語法 命令檔案將命令的執行結果送至指定的檔案中。例如 ls l list 將執行 ls l 命令的結果寫入檔案list 中。語法 命令 檔案將命令的執行結果送至指定的檔案中,若檔案已經存在,則覆蓋。例如 ls lg list 將執行 ls lg 命令的結果覆蓋寫入檔案list 中。語...