linux使用共享記憶體實現程序間通訊原始碼

2021-10-08 12:18:32 字數 1723 閱讀 9427

寫的部分

#include

#include

#include

#include

#include

intmain()

shmaddr =

shmat

(shmid,0,

0);//對映

printf

("shmat ok\n");

strcpy

(shmaddr,

"liuzhihao");

//傳遞資料

sleep(5

);//睡5秒

shmdt

(shmaddr)

;//釋放共享記憶體資料

shmctl

(shmid,ipc_rmid,0)

;刪除共享記憶體

printf

("quit\n");

//列印退出

return0;

}~~

讀的部分

#include

#include

#include

#include

#include

intmain()

shmaddr =

shmat

(shmid,0,

0);//對映

printf

("shmat ok\n");

printf

("data:%s \n"

,shmaddr)

;//列印輸出資料

shmdt

(shmaddr)

;//釋放讀取的資料

printf

("quit\n");

//列印關閉

return0;

}~

寫的介面顯示

clc@embed_learn:~/liuzhihao$ ./w

shmat ok

quit

讀的介面顯示

clc@embed_learn:~/liuzhihao$ ./r

shmat ok

data:liuzhihao

quit

檢視刪除共享記憶體

clc@embed_learn:~/liuzhihao$ipcs -m

------ shared memory segments --------

key shmid owner perms bytes nattch status

0x00000000 0 clc 600 393216 2 dest

0x00000000 32769 clc 600 393216 2 dest

0x01056453524290clc 666 4096 0

clc@embed_learn:~/liuzhihao$ipcrm -m 524290

clc@embed_learn:~/liuzhihao$ ipcs -m

------ shared memory segments --------

key shmid owner perms bytes nattch status

0x00000000 0 clc 600 393216 2 dest

0x00000000 32769 clc 600 393216 2 dest

linux 程序間共享記憶體

可以採用sysv的shmget shmat 實現。但是我更喜歡shm open mmap 更簡單。writer.c include include include include include include include include struct ofs stat int main voi...

linux程序通訊 共享記憶體

共享記憶體是ipc機制中的第二個。他允許連個不相關的程序訪問同一塊邏輯記憶體,能夠有效地實現兩個程序間資料傳遞。int shmget key t key,sizr t size,int shm 建立共享記憶體 key為共享記憶體段的命名,size為以位元組為單位的記憶體容量,shm 包含9位元許可權...

Linux程序通訊 共享記憶體

對於linux來講,不同程序之間的記憶體是不能讀寫的,乙個程序只能讀寫自己所屬的記憶體。a程序是不能讀寫b程序記憶體的?如果程式確實想通過記憶體交換資料怎麼辦?linux提供共享記憶體機制。共享記憶體是由核心處於多個程序間交換資訊的目的而留出的一塊記憶體區 段 共享記憶體也需要設定相關許可權的。這段...