程序間的通訊方式

2021-09-12 08:59:17 字數 992 閱讀 4637

*fork()乙個程序,會有兩次返回值,在父程序中返回子程序的pid,在子程序中返回0;

***程序是資源分配的最小單元,執行緒是最小的執行單元,每個程序有單獨的位址空間,每個執行緒共享程序的位址空間和資料段。程序間的通訊麻煩,切換也麻煩。執行緒間的通訊簡單但是容易對共享資源的同時訪問出問題。多個程序間相互不影響,乙個程序掛了並不影響另乙個。多個執行緒間有影響,其中乙個掛了就整個掛了。

1、管道:fd[1]寫入、fd[0]讀出

(1)分為命名管道fifo和無名管道pipe;

(2)無名管道只能用於有親緣關係的程序間的通訊,例如父子程序;

(3)而命名管道可以用於沒有親緣關係間的程序通訊,檔案的形式,有點像對檔案的讀寫操作;

(4)他們都是半雙工的通訊方式,單向無格式位元組流的傳輸,所以兩個程序間要相互進行通訊就必須建立兩條管道

(5)通過核心緩衝區實現資料傳輸的。先進先出,讀出資料後就會清除對應的記憶體

(6)若要資料流從父程序流向子程序,則關閉父程序的讀端(fd[0])與子程序的寫端(fd[1]);反之,則可以使資料流從子程序流向父程序。這有點可以理解為有一條管道,程序1從程序1的fd[1]放水進管道,水經過管道後從程序1的fd[0]流回。同理程序2也有對應的fd[1]和fd[0]對管道的操作。如果堵住程序1的fd[0]和程序2的fd[1],那麼水就會從程序1的fd[1]流到程序2的fd[0]了。

2、共享記憶體

(1)開闢乙個儲存區,該儲存區可以被多個程序對映到自身的位址空間中

(2)效率高只需拷貝2次,不像管道需要在核心和使用者之間進行4次拷貝

3、訊息佇列

(1)是乙個訊息鏈結表,儲存在核心中

(2)可以讀寫指定型別的資料,不必都只能從頭讀到尾

4、訊號量

訊號量一般用於程序間對共享資源的訪問控制

5、訊號sinal

訊號的捕獲和處理,給不在執行狀態的程序也可發訊號,訊號會先交由核心儲存,

6、套接字

支援兩個不同主機上的程序進行ipc

程序間的通訊方式,執行緒間的通訊方式 程序

當時做筆記的時候 忘了在 看到的了,有時間我再研究研究 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semo...

程序間通訊的方式?執行緒間通訊的方式?

管道 命名管道 訊號量 訊息佇列 訊號及共享記憶體只適用於本地程序間通訊,套接字則可用於遠端通訊,因而一般用於網路程式設計。部分概念解釋 匿名管道是在快取中開闢的輸出和輸入檔案流的空間,只能用於父子關係的程序之間。因為父子程序的輸入和輸出檔案描述符是一致的。命名管道是一種實際存在的fifo檔案,稱作...

程序間通訊方式

謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...