閒來沒事給想要學習程序間使用共享記憶體通訊的例子,共享記憶體的效率比訊息佇列、訊號量都要高?為什麼呢?
(1)共享記憶體是執行在使用者空間的,由應用程式控制。
(2)訊息佇列和訊號量都是把資料從乙個程序使用者空間複製到核心空間,然後再由核心控制項複製到另外乙個程序的使用者空間。
#include #include#include
#include
#include
#include
#include
#include
#include
#define key 0x1234
#define size 512
#define perm s_irusr|s_iwusr
int main(void
)
if(fork()>0
)
else
printf(
"parent %d send:
",parent_id);
fgets(p_shm,size,stdin);
sleep(1);}}
else
if(strlen(shm)>0&&strncmp(shm,"
end",3)==0
) sleep(1);}}
if(shmdt(shm)==-1
)
if(shmctl(shmid,ipc_rmid,null)==-1
)}
執行結果:
----parent pid=3477------parent3477
send:hello
child
3478
recv:hello
parent
3477 send:123456
child
3478 recv:123456
parent
3477 send:this
a test
child
3478 recv:this
a test
parent
3477
send:end
child
3478
recv:end
***recyle child =3478*****
Linux程序間通訊 使用共享記憶體
一 什麼是共享記憶體 顧名思義。共享記憶體就是同意兩個不相關的程序訪問同乙個邏輯記憶體。共享記憶體是在兩個正在執行的程序之間共享和傳遞資料的一種很有效的方式。不同程序之間共享的記憶體通常安排為同一段物理記憶體。程序能夠將同一段共享記憶體連線到它們自己的位址空間中,全部程序都能夠訪問共享記憶體中的位址...
Linux程序間通訊 使用匿名管道
在前面,介紹了一種程序間的通訊方式 使用訊號,我們建立通知事件,並通過它引起響應,但傳遞的資訊只是乙個訊號值。這裡將介紹另一種程序間通訊的方式 匿名管道,通過它程序間可以交換更多有用的資料。一 什麼是管道 如果你使用過linux的命令,那麼對於管道這個名詞你一定不會感覺到陌生,因為我們通常通過符號 ...
Ubuntu下Linux程序間通訊 共享記憶體
linux提供了多種程序間通訊的方法,常見有管道 匿名 fifo 有名管道 訊息佇列 訊號量 共享記憶體,socket通訊。linux程序間通訊 匿名管道 linux程序間通訊 fifo 有名管道 linux程序間通訊 訊息佇列 linux程序間通訊 訊號量 linux程序間通訊 共享記憶體 5.共...