程式間通訊(一)管道
程式間通訊:多個程式之間資料交換。
程式間通訊方式:訊號、管道、訊號量、訊息佇列、共享記憶體、套接字(socket)
程式建立:pid_t fork
程式間資料共享問題:
全域性變數、堆、棧 不共享
檔案 共享
按照訊號傳送方向與時間的關係,資料通訊可以分為三種型別:單工通訊、半雙工通訊、全雙工通訊。
單工通訊:訊號只能向一個方向傳輸,任何時候都不能改變訊號的傳送方向。
半雙工通訊:訊號可以雙向傳遞,但是必須是交替進行,一個時間只能向一個方向傳送。
全雙工通訊:訊號可以同時雙向傳遞。
管道在同一時刻只能是半雙工通訊。
有名管道:在檔案目錄樹中有一個檔案標示(管道檔案),實際不佔磁碟空間,資料快取在記憶體上。
應用於任意兩個程式之間資料的單向傳遞。
具體操作
建立:(命令方式)mkfifo (函式方式)mkfifo()
開啟: open
寫資料: write
讀資料: read
關閉: close
maina.c檔案
mainb.c檔案
阻塞執行函式:函式呼叫以後並不會立即返回,需要等待某些條件的發生才會返回。例如open操作管道檔案時,阻塞執行的函式。
如果一個程式以只寫方式開啟一個管道檔案時,open會阻塞執行,直到有一個程式以只讀方式開啟管道,open才會返回,程式才會接著執行。
read函式也會阻塞執行,直到寫端寫入資料或者所有寫端都關閉。read讀取資料會將記憶體上的資料清空。
無名管道:相對於有名管道而言,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何蛛絲馬跡。
無名管道因其在使用前沒有任何的標示,所以它只能應用於父子程式之間。
ps:管道都是半雙工通訊,而無名管道建立後,父程式在fork產生子程式後,兩程式分別有一對讀寫端。
fork之後,要麼子程式關閉讀端父程式關閉寫端,要麼子程式關閉寫端父程式關閉讀端。
相關文章
- Linux 的程式間通訊:管道Linux
- linux 程式間通訊之管道Linux
- linux程式間通訊--管道(PIPE & FIFO)Linux
- Linux程式間通訊②:有名管道FIFOLinux
- 溫故之.NET程式間通訊——管道
- 【IPC程式間通訊之二】管道PipeC程式
- 管道流間的通訊
- 程序間通訊(1)-管道
- Linux系統程式設計之程式間通訊方式:管道(一)Linux程式設計
- 3|程式間通訊--有名管道學習筆記筆記
- linux程式間通訊-----管道總結例項Linux
- Linux系統程式設計之程式間通訊方式:命名管道(一)Linux程式設計
- 20.2、python程式間通訊——佇列和管道Python佇列
- Delphi 簡單命名管道在兩個程式間通訊
- LLinux系統程式設計(10)——程式間通訊之管道Linux程式設計
- Windows程式通訊之一看就懂的匿名管道通訊Windows
- Linux 下的程式間通訊:使用管道和訊息佇列Linux佇列
- Linux系統程式設計之程式間通訊方式:管道(二)Linux程式設計
- Linux系統程式設計(11)——程式間通訊之有名管道Linux程式設計
- 系統程式設計——管道通訊程式設計
- C#使用匿名管道在本地程式之間進行通訊C#
- Linux系統程式設計之程式間通訊方式:命名管道(二)Linux程式設計
- Linux程式執行緒學習筆記:程式間通訊 之 管道Linux執行緒筆記
- PHP多程式程式設計(2):管道通訊PHP程式設計
- C#使用命名管道通過網路在程式之間進行通訊C#
- 利用管道Pipelines做程序間的通訊
- 程式間通訊
- 利用windows api實現程式通訊(命名管道)WindowsAPI
- 匿名管道通訊實現
- PHP程式間通訊PHP
- 程式間的通訊
- 程式間通訊(Socket)
- 程式間通訊 --IPC
- windows程式間通訊Windows
- 一個故事看懂程式間通訊技術
- 【IPC程式間通訊之一】郵槽MailSlotC程式AI
- Linux程式間通訊Linux
- 程式間通訊——LINUXLinux