Linux程序間通訊 IPC 學習筆記。

2021-04-29 16:33:49 字數 1916 閱讀 5570

ipc:interprocess communication 程序間通訊

一、管道:

1. 無名管道:

開啟與關閉管道:

#include

int pipe(int filedes[2]);

filedes[0]用於讀出資料,讀取時必須關閉寫入端,即close(filedes[1]);

filedes[1]用於寫入資料,寫入時必須關閉讀取端,即close(filedes[0])。

2. 有名管道fifo:

建立fifo:

#include

#include

int mkfifo(const char *pathname, mode_t mode);

讀寫管道與讀寫檔案的操作相同。

二、system v fifo:

1. 共享記憶體:

建立共享記憶體區:

#include

#include

#include

int shmget(key_t key, int size, int flags);

附加/分離共享記憶體區:

#include

#include

#include

char *shmat(int shmid, char *shmaddr, int flags);

int shmdt(char *shmadr);

2. 訊息佇列:

建立訊息佇列:

#include

#include

#include

int msgget(key_t key, int flags);

讀寫訊息:

#include

#include

#include

int msgsnd(int msqid, const void *prt, size_t nbytes, int flags);

int msgrcv(int msqid, void *prt, size_t nbytes, int flags);

prt是指向msgbuf結構的指標,msgbuf在中定義如下:

struct msgbuf ;

msgbuf結構可以自由更改設定。

刪除訊息佇列:

#include

#include

#include

int int msgctl(int msqid, int cmd, struct msqid_ds *buf);

cmd為ipc_rmid時為刪除佇列msqid。

3. 訊號量:

建立/開啟:

#include

#include

#include

int semget(key_t key, int nsems, int flags);

int semop(int semid, struct sembuf *semops, unsigned nops);

sembuf結構定義如下:

struct sembuf ;

如果sem_op為正,表示資源被釋放,訊號量增加。

如果sem_op為負,表示資源被申請,訊號量減少。

如果sem_op為0,表示程序被阻塞直到訊號量變為0。

控制和刪除:

#include

#include

#include

int semctl(int semid, int semnum, int cmd, union semun arg);

當cmd為ipc_rmid時為刪除訊號量集。

Linux程序間通訊 IPC

linux下的程序通訊手段基本上是從unix平台上的程序通訊手段繼承而來的。而對unix發展做出重大貢獻的兩大主力at t的貝爾實驗室及bsd 加州大學伯克利分校的伯克利軟體發布中心 在程序間通訊方面的側重點有所不同。前者對unix早期的程序間通訊手段進行了系統的改進和擴充,形成了 system v...

Linux程序間通訊(IPC)

程序通訊有例如以下一些目的 a 傳輸資料 乙個程序須要將它的資料傳送給還有乙個程序。傳送的資料量在乙個位元組到幾m位元組之間 b 共享資料 多個程序想要操作共享資料。乙個程序對共享資料的改動,別的程序應該立馬看到。c 通知事件 乙個程序須要向還有乙個或一組程序傳送訊息。通知它 它們 發生了某種事件 ...

Linux程序 程序間通訊IPC

一 linux程序 1 程序的記憶體映像 2 解釋 bss段 在採用段式記憶體管理的架構中,bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。資料段 在採用段式記...