io的重定向通常與fd有關,shell的fd通常為10個,也就是0-9,
常用的fd有三個,0(stdin標準輸入),1(stdout標準輸出),2(stderr,標準錯誤輸出)
可以檢視ls /dev/fd
mkfifo建立fifo特殊檔案,是乙個命名管道(可以用來做程序之間通訊的橋梁)
mkfifo tmp.fifo#建立乙個fifo檔案
然後在開啟乙個視窗,來測試這個檔案
cat的時候沒有結束,而且是在等待,那就追加乙個資訊看下
可以看到的是,我們剛追加完乙個資訊,那邊就收到了,而且收到後就退出了cat
,然後在開啟乙個視窗測試,兩個視窗讀資料,乙個寫。
可以看到的是,追加完之後,兩個都退出了,但是只有1視窗接收到資料了,因為我們剛才是先在1視窗執行的命令,我們再來一次,2先執行cat看看
總結:這個檔案的特性就是,有先後順序,誰先來的,誰能拿到資料
(截圖來自
exec命令:常用來替代當前shell並重新啟動乙個shell,換句話說,並沒有啟動子shell。使用這一命令時任何現有環境都將會被清除。exec在對檔案描述符進行操作的時候,也只有在這時,exec不會覆+蓋你當前的shell+環境。
如果直接執行exec 命令,會執行完退出當前shell,exec ls,列出當前目錄下的目錄和檔案之後就退出當前shell
關閉exec,n代表fd的id
exec n>&-
這個是關閉fd5
exec 5>&-
建立個fd6,把結果都輸入到file裡,我們ls把結果重定向到fd6了,fd6重定向file了,所以我們看到ls >&6的時候結果已經出現在file裡了
exec 6>&-是關閉fd6,關閉之後在輸入就提示報錯了
再來乙個例子,exec配合fifo檔案:
建立乙個fifo檔案
然後再開乙個視窗讀取
我們會發現,執行了exec 6<>tmp.fifo這句後,我們cat的時候不會中斷了,不像之前接收到就退出了
但是,退出之後,在檢視,看不到以前的資料,只能接收最新的資料
當我們關閉後,視窗2退出了cat模式,視窗1再寫也寫不進去了。
使用open開啟FIFO檔案
include include include include include include include define fifo name tmp my fifo int main int argc,char argv argv if strncmp argv,o rdonly 8 0 ope...
FIFO佇列和優先佇列
fifo佇列相當於一般的佇列 優先隊列為操作時有優先順序的佇列 1.標頭檔案 include 2.fifo佇列 queue 型別名 變數名 3.優先佇列 priority queue 型別名 變數名 1.預設優先順序為優先順序最高的先出隊,預設的int型別的優先佇列中先出隊的為佇列中較大的數。2.小...
FIFO佇列和優先佇列
fifo佇列 定義 先進先出的儲存結構 刪除時先刪最後乙個元素 queue 型別 q 增 q.push 元素值 在隊尾加入乙個元素 void刪 q.pop 刪除元素,刪除隊首元素 void改 查 q.size 返回佇列中剩餘元素個數 int q.empty 返回佇列是否為空 bool q.front...