Linux 程序間通訊1

2021-08-13 04:36:07 字數 1710 閱讀 6417

一、程序間通訊概述

程序間通訊:在使用者空間實現程序通訊是不可能的,通過linux核心通訊

1.資料傳輸 : 乙個程序需要將它的資料傳送給另乙個程序

2.資源共享 :多個程序之間共享同樣的資源

3.通知事件 :乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件

4.程序控制 :有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有操作,並能夠及時知道它的狀態改變

二、現在linux使用的程序間通訊方式包括:

1、管道(pipe)和有名管道(fifo)

2、訊號(signal)

3、訊息佇列

4、共享記憶體

5、訊號燈

6、套接字(socket)

三、管道通訊

1、管道是單向的、先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。

2、檔案io中的open函式不能建立管道檔案,只能用pipe函式來建立管道。

3、無名管道建立:int pipe(int filedis[2]);

當乙個管道建立時,它會建立兩個檔案描述符:

filedis[0] 用於讀管道,

filedis[1] 用於寫管道

4、 管道用於不同程序間通訊。通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道

5、必須在系統呼叫fork( )前呼叫pipe( ),否則子程序將不會繼承檔案描述符

6、命名管道和無名管道基本相同,但也有不同點:

無名管道只能由父子程序使用;

但是通過命名管道,不相關的程序也能交換資料

7、int mkfifo(const char * pathname, mode_t mode)

pathname:fifo檔名

mode:屬性(見檔案操作章節)

一旦建立了乙個fifo,就可用open開啟它,一般的檔案訪問函式(close、read、write等)都可用於fifo

四、訊號通訊

1、訊號(signal)機制是unix系統中最為古老的程序間通訊機制,很多條件可以產生乙個訊號:

1、當使用者按某些按鍵時,產生訊號

2、硬體異常產生訊號:除數為0、無效的儲存訪問等等。這些情況通常由硬體檢測到,將其通知核心,然後核心產生適當的訊號通知程序,例如,核心對正訪問乙個無效                 儲存區的程序產生乙個sigsegv訊號

3、程序用kill函式將訊號傳送給另乙個程序

4、使用者可用kill命令將訊號傳送給其他程序

2、sigkill\sigstop。

這兩種訊號不能被忽略的原因是:

它們向超級使用者提供了一種終止或停止程序的方法

3、執行使用者希望的動作

通知核心在某種訊號發生時,呼叫乙個使用者函式。在使用者函式中,執行使用者希望的處理

4、  執行系統預設動作

對大多數訊號的系統預設動作是終止該程序

5、使用alarm函式可以設定乙個時間值(鬧鐘時間),當所設定的時間到了時,產生sigalrm訊號.如果不捕捉此訊號,則預設動作是終止該程序

6、pause函式使呼叫程序掛起直至捕捉到乙個訊號。

#include

int pause(void)

只有執行了乙個訊號處理函式後,掛起才結束

7、1、sig_ign:忽略此訊號

2、sig_dfl: 按系統預設方式處理

3、訊號處理函式名:使用該函式處理

Linux程序間通訊1

1.linux下程序間通訊方式有有那些?1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。3 訊號量 semop...

Linux 程序間通訊 1 管道

1.匿名管道 include 功能 建立匿名管道 int pipe int fd 2 引數fd 檔案描述符陣列,其中fd 0 表示讀端,fd 1 表示寫端 返回值 成功返回0,失敗返回 1管道並非屬於程序的資源,屬於作業系統,父子程序共享用於管道的檔案描述符,所以兩個程序通過作業系統提供的記憶體空間...

Linux 程序間通訊方式(1)

現在linux使用的程序間通訊方式包括 1 管道 pipe 和有名管道 fifo 2 訊號 signal 3 訊息佇列 4 共享記憶體 5 訊號量 6 套接字 在linux中,管道是一種使用頻繁地通訊機制,從本質上說,管道也是一種檔案,但他又和普通檔案有所不同,管道可以克服使用檔案進行通訊的兩個問題...