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 的奇妙之處在於它被呼叫一...