linux 訊息佇列 和 共享記憶體

2021-10-03 08:40:11 字數 2411 閱讀 7572

1.基本知識

存在於核心中
2.基本流程及函式

傳送/接收:(1

) 申請key值(2

) 建立(開啟)訊息佇列(3

) 傳送訊息(建立結構體)

typedef

struct

msg_t;(1

)key_t key =

ftok

("/",5

);if( key<0)

(2)int msgid =

msgget

(key,ipc_creat|

0777);

if( msgid<0)

(3)msg_t msg;

msgsnd

(msgid,

&msg,

sizeof

(msg),0

);//引數四:0 代表阻塞 ipc_nowait 不阻塞

msgrcv

(msgid,

&msg,

sizeof

(msg),1

,ipc_nowait)

;

3.舉例

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

struct

msg_t;

intmain()

//建立訊息佇列描述符

int msgid =

msgget

(key,ipc_creat|

0777);

if(msgid<0)

//msgctl(msgid,ipc_rmid,null);

pid_t id =

fork()

;int x;

if( id>0)

else

if( id ==0)

;msgsnd

(msgid,

&msg,

sizeof

(msg)

-sizeof

(long),

0);wait

(null);

printf

("send complete!!!\n");

}else

}

4.關於刪除或查詢的命令

命令列:

查詢:ipcs -q

刪除:ipcrm -q msgid

**中:

msgctl

(msgid,ipc_rmid,

null

);

1.基本知識

a.存在核心區一塊空間,程序可以將其對映到自己的私有位址空間

b.最為高效的程序間通訊方式

2.步驟及具體函式

a.建立key  ftok

b.建立 shmget

c.對映 shmat

d.解除對映 shmdt

key_t key =

ftok

("/"

,'a');

int shmid =

shmget

(key,

1024

,ipc_creat|

0777);

//引數二:建立空間的大小

//引數三:許可權

char

*p =

shmat

(shmid,

null,0

);//引數三:0 可讀寫 , shm_rdonly唯讀

shmdt

(p);

3.示例

#include

#include

#include

#include

#include

intmain()

//建立共享記憶體描述符

int shmid =

shmget

(key,

1024

,ipc_creat|

0777);

if(shmid<0)

pid_t id =

fork()

;if( id>0)

else

if( id ==0)

else

}

4.刪除及查詢

命令列:

查詢:ipcs -m

刪除:ipcrm -m shmid

Linux 記憶體共享與訊息佇列

共享記憶體 共享共存區域是被多個程序共享的一部分物理記憶體。如果多個程序都 把該記憶體區域對映到自己的虛擬位址空間,則這些程序就都可以直接 訪問該共享記憶體區域,從而可以通過該區域進行通訊。共享記憶體是進 程間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了數 據,共享這個記憶體區域的所有程...

Linux共享記憶體 訊息佇列通訊詳解

在linux核心中建立一段共享記憶體,使用shmget函式 include include int shmget key t key,size t size,int shm 第乙個引數key定義是否建立乙個帶金鑰的共享記憶體。include include include include inclu...

管道 訊息佇列 共享記憶體

管道通訊 pipe 管道通訊方式的中間介質是檔案,通常稱這種檔案為管道檔案。兩個程序利用管道檔案進行通訊時,乙個程序為寫程序,另乙個程序為讀程序。寫程序通過寫端 傳送端 往管道檔案中寫入資訊 讀程序通過讀端 接收端 從管道檔案中讀取資訊。兩個程序協調不斷地進行寫 讀,便會構成雙方通過管道傳遞資訊的流...