父程序在核心空間建立了乙個共享記憶體,通過fork函式,父子程序通過fork函式繼承了shmid,所以父子程序可以對核心中同乙個物件操作,剛開始父程序不斷往物件裡寫,然後開始發訊號sigusr1給子程序,讓子程序讀。對於子程序來說,剛開始睡眠,等待父程序寫,然後被核心喚醒,讀共享記憶體。此時父程序開始睡眠,當子程序讀完後,將父程序喚醒,父程序喚醒後繼續寫……一直迴圈(父子程序都通過shmat對映到自己的空間)
**開始執行時,因為父程序要等待從鍵盤接收訊號,所以父子程序都是s+在後台睡眠狀態
#include
"stdio.h"
#include
"sys/types.h"
#include
"sys/shm.h"
#include
"signal.h"
#include
"unistd.h"
#include
"stdlib.h"
#include
"string.h"
void
myfun
(int signum)
intmain
(int argc,
char
*ar**)
//從命令列輸入3個引數,ipcrm -m pid號
printf
("建立共享記憶體成功 shmid=%d\n"
,shmid)
; pid=
fork()
;//建立程序pid
if(pid >0)
//這是父程序
while(1
)}if(pid==0)
while(1
)//迴圈讀
共享記憶體實現程序間通訊
1 物理檔案控制代碼 任何可以獲得的物理檔案控制代碼,如果你需要建立乙個物理檔案無關的記憶體對映也無妨,將它設定成為 0xffffffff invalid handle value 就可以了.如果需要和物理檔案關聯,要確保你的物理檔案建立的時候的訪問模式和 保護設定 匹配,比如 物理檔案唯讀,記憶體...
程序通訊 共享記憶體
定義 共享記憶體,就是通過核心操作,在記憶體上開闢一塊供多個程序共同訪問的記憶體塊。這塊記憶體塊的建立和 銷毀是由核心來控制 當然,也可以在程序內部呼叫系統庫函式來建立和銷毀,類似於訊息機制和訊號 量機制 在這個記憶體塊上,程序可以像操作記憶體一樣操作共享區記憶體。作用 第乙個,就是提供程序間大資訊...
程序通訊共享記憶體
共享記憶體是允許多個程序共享記憶體 共享記憶體結構 struct shmid ds struc ipc permshm perm 指向該記憶體指標 int shm segsz 共享記憶體的大小 ushort shm lkcnt 共享記憶體被鎖定的時間 pid t shm cpid 最近呼叫shomp...