Linux 程序間通訊

2021-10-02 20:45:57 字數 2995 閱讀 2343

//標頭檔案

#include

//建立管道

intpipe

(int fd[2]

);

fd:檔案描述符陣列,其中fd[0]表示讀端,fd[1]表示寫端

返回值:成功返回0,失敗返回錯誤**。

如下demo我們可以體會下匿名管道的操作特性

#include

#include

#include

#include

intmain()

;int ret =

pipe

(pipefd)

;int pid =

fork()

;if(ret <0)

if(pid <0)

else

if(pid ==0)

;int ret =

read

(pipefd[0]

,buff,

1023);

printf

("buff:[%s] - [%d]\n"

,buff,ret);}

else

while(1

)return0;

}

我們看到父程序通過管道寫端將資訊傳給子程序,子程序通過讀端拿到訊息,那麼管道的讀寫規則是什麼樣的呢?

管道讀寫規則:

//標頭檔案

#include

//建立命名管道

intmkfifo

(const

char

*filename,mode_t mode)

;//filename檔名,mode對該檔案的許可權

我們通過命名管道實現乙個簡單的通訊來體會命名管道的操作特性

//write

#include

#include

#include

#include

#include

#include

#include

intmain()

int fd =

open

(file,o_wronly);if

(fd <0)

char buff[

1024];

while(1

)else

if(s <=0)

}close

(fd)

;return0;

}

讀端:

通過上面的demo演示我們其實可以看出匿名管道與命名管道的區別

int

shmget

(key_t key, size_t size,

int shm***)

; 引數:key --

- 這個記憶體段名字

size --

- 共享記憶體的大小

shm*** --

- 對於記憶體的操作許可權

返回值: :成功返回乙個非負整數,即該共享記憶體段的標識碼;失敗返回-

1

連線

將共享記憶體段連線到程序位址空間

void

*shmat

(int shmid,

const

void

*shmaddr,

int shm***)

;引數:shmid --

- 共享記憶體標識

shmaddr --

- 指定連線的位址

shm*** --

- 它的兩個可能取值是shm_rnd和shm_rdonly

返回值:成功返回乙個指標,指向共享記憶體第乙個節,失敗返回-

1

脫離

將共享記憶體段與當前程序脫離

intshmdt

(const

void

*shmaddr)

; 引數:shmaddr --

- 由shmat所返回的指標

返回值:成功返回0;失敗返回-

1 注意:將共享記憶體段與當前程序脫離不等於刪除共享記憶體段

控制

用於控制共享記憶體

intshmctl

(int shmid,

int cmd,

struct shmid_ds *buf)

; 引數:shmid --

- 由shmget返回的共享記憶體標識碼

cmd --

- 將要採取的動作(有三個可取值)

buf --

- 指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構

返回值:成功返回0

,失敗返回-

1。

核心中的計數器:

若技術 > 0則表示有資源,可以獲取; <= 0表示沒有資源,則進入等待狀態。

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...