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