linux 程序 共享記憶體通訊

2021-10-04 07:50:30 字數 1911 閱讀 1832

1. 概述:

該demo主要實現linux下程序之間的共享記憶體通訊, 相關介面介紹可以參考<2. 場景(半雙工):

父程序簡單地通過共享記憶體將資料傳送給子程序

3. 測試:

程序程式設計demo(共享記憶體)

ipc相關的命令: ipcs ipcrm(釋放ipc)

檢視程序屬性: ulimit -a

*/#include

#include

#include

#include

#include

#include

#include

#include

#define shm_id 1

#define max_buf 64

struct shm_st

;int

main

(int argc,

char

**ar**)

/* 父 -> 子

*/pid =

fork()

;if(pid <0)

return-1

;}else

if(pid ==0)

shared =

(struct shm_st *

)shm;

while(1

)usleep(1

*1000);

}/* 把共享記憶體從當前程序中分離 */if(

shmdt

(shm)

<0)

shm =

null

; shared =

null;}

else

shared =

(struct shm_st *

)shm;

shared->flag =0;

memset

(shared->buf,

0x0,

sizeof

(shared->buf));

memcpy

(shared->buf,

"demo_process_ipc_shmget"

,sizeof

(shared->buf));

printf

("parant process\t shared->buf = %s\n"

, shared->buf)

; shared->flag =1;

if(shmdt

(shm)

<0)

shm =

null

; shared =

null

;wait

(null);

/* 刪除共享記憶體段 */if(

shmctl

(shmid, ipc_rmid,0)

<0)

}return0;

}

#makefile

cc :

= gcc

include =

-i /home/demo/include/

all:

$(cc) demo_process_ipc_shmget.c $(include)

-o demo_process_ipc_shmget -wall -werror

clean:

rm demo_process_ipc_shmget

linux程序通訊 共享記憶體

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

Linux程序通訊 共享記憶體

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

Linux程序通訊 共享記憶體

共享記憶體 共享記憶體是一種最為高效的程序間通訊方式,在程序間通訊時核心專門的留出一塊記憶體區。在這段記憶體區可以由訪問程序將其對映到自己的私有位址空間。因此程序就可以直接讀寫這一塊記憶體區,極大的提高了效率。共享記憶體的步驟 1 建立共享記憶體 2 對映貢獻記憶體 原理 相關函式 shmget 建...