命名管道
2.system v共享 管道
system v程序間通訊
posix程序間通訊
管道是unix中的一種最古老的的程序見得通訊方式,它是乙個程序連線到另乙個程序的資料流。使用的方式是標準輸出和標準輸入。
建立乙個管道:
int
pipe
(int
,fd[2]
);//fd為檔案描述符陣列,fd[0]代表讀端,fd[1]代表寫端
//返回0時代表成功,失敗時返回錯誤碼
從鍵盤讀取資料,寫入管道,讀取管道,寫到螢幕:
#include
#include
#include
#include
intmain
(void
)memset
(buf,
0x00
,sizeof
(buf));
// 從管道讀取資料if(
(len=
read
(fds[0]
, buf,
100))==
-1)// 將讀取到的資料寫入標準輸出(螢幕)if(
write(1
, buf, len)
!= len )
}return0;
}
從上面的**不難看出, 管道的操作類似於檔案操作. linux下一切皆檔案的思想得以在此體現.
管道特點
只能用於具有共同祖先的程序(具有親緣關係的程序)之間的通訊. 一般由乙個程序建立管道, 然後呼叫fork, 父子程序就可以應用這個管道.
管道的生命週期和程序一致.
核心會對管道操作進行互斥\
管道是半雙工通訊, 資料只能朝乙個方向流動, 需要互相通訊時, 需要建立兩個管道.
命名管道可以從命令列上進行建立:
mkfifo filename
我們在學習記憶體分配的時候一定會看見這樣一張圖:
中間的共享區, 大家在學的時候都比較懵逼這是幹啥的.
這就是程序間通訊的第二種方式——共享記憶體需要使用到的區域.
共享記憶體是最快的ipc形式. 一旦這樣的記憶體對映到共享它的程序的位址空間, 這些程序間資料傳遞不再涉及到核心, 換句話說是程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料.
Linux程序間通訊
程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...