linux應用程式設計基礎 程序間通訊(IPC)

2021-06-16 09:38:52 字數 1680 閱讀 8296

theme:程序間通訊(ipc)

author:jeff.xue

contact information:[email protected]

1.程序間通訊作用

2.通訊方式:

3.管道通訊

(1)管道:單向、先進先出

(2)管道種類

(3)無名管道

(4)命名管道(fifo):不相干程序交換資訊

4.訊號通訊

(1)30種訊號型別:常見:sigint(中斷),sigkill(kill命令發出的訊號)

(2)處理方式:

(3)訊號傳送:kill/raise

(4)alarm設定乙個時間值產生sigalarm訊號,預設動作終止該程序(乙個程序只能有乙個)

#include unsigned int alarm(unsigned int seconds);

(5)pause 使程序掛起知道捕捉乙個訊號

int pause(void);

(6)主要處理

void ( *signal (int signo, void (*func)(int)))(int)

//func 可以分為:sig_ing:忽略 / sig_dfl:預設處理 / 訊號處理函式名

5.共享記憶體:被多個程序共享的一部分物理記憶體(特點:快)

step:

(1)int shmget(key_t key,int size,int shm***);

(2)int shmat(int shmid,char *shmaddr,int flag);

(3)脫離對映:int shmdt(char *shmaddr);

6.訊息佇列

(1)訊號能傳送的訊號量有限,管道只能傳送無格式的位元組流

(2)訊息佇列:訊息鍊錶,具有特定的格式(讀完則清除)

(3)訊息佇列的核心持續性要求每個訊息佇列有唯一的鍵值

#include #include key_t ftok(char *pathname,char proj);//返回鍵值

int msgget(key_t key,int msg***);//返回訊息佇列描述字

/*msg***:

ipc_creat:建立新的佇列

ipc_excl:若已經存在,返回error

ipc_nowait:不阻塞

key為 ipc_private也可建立

*///向訊息佇列傳送訊息

int msgsnd(int msqid,struct msgbuf *msgp,int msgsz,int msg***);

/*struct msgbuf

*///接收訊息

int msgrcv(int msqid,struct msgbuf *msgp,int msgsz,long msgtype,int msg***);//成功讀取後,佇列中訊息則被刪除

7.訊號量

(1)主要用途:保護臨界資源(根據其判斷是否訪問資源)/程序同步

(2)分類

(3)建立/開啟

(4)操作

struct sembuf

Linux應用程式設計 程序通訊

通訊方式有管道pipe,訊號 一 pipe 管道分兩種無名管道,有名管道。1 無名管道 父程序和子程序可通過無名管道傳輸資料,管道有兩個口,一端寫一端讀,半雙工通訊。可以當作檔案進行操作,所以建立的管道會有兩個檔案描述符fds 0 和fds 1 fds 0 用於讀,fds 1 用於寫,關係如圖。實驗...

Linux應用程式設計之程序程式設計

程序同步 一組併發的程序按照一定的順序執行的過程稱為程序間的同步。獲取id include pid t getpid void 獲取本程序id pid t getppid void 在子程序中獲取父程序id 程序建立 include pid t fork void fork 的奇妙之處在於它被呼叫一...

Linux應用程式設計之程序程式設計

程序同步 一組併發的程序按照一定的順序執行的過程稱為程序間的同步。獲取id include pid t getpid void 獲取本程序id pid t getppid void 在子程序中獲取父程序id 程序建立 include pid t fork void fork 的奇妙之處在於它被呼叫一...