初識 fifo檔案和exec

2021-09-02 06:29:06 字數 1784 閱讀 2222

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...