程序間通訊 共享記憶體

2021-09-21 15:13:28 字數 1635 閱讀 7451

#include #include 

#include

#include

#include

#include

#include

#include

#include

/*int shm_open(const char *name, int oflag, mode_t mode);

//建立或開啟乙個共享記憶體,成功返回乙個整數的檔案描述符,錯誤返回-1。

name : 共享記憶體區的名字;

oflag: 標誌位;open的標誌一樣

mode : 許可權位

編譯時要加庫檔案-lrt

*/#ifndef t_desc

#define t_desc(x, y) (y)

#endif

#if t_desc("tu1", 1)

#define shm_name "shm_ram"

#define file_size 4096

#define write_str "to be or not to be"

int tu1_proc(int argc, char **ar**)

;

void* map_addr =null;

if (argc < 2

) param = atoi(ar**[1

]);

//建立或者開啟乙個共享記憶體

fd = shm_open(shm_name, o_rdwr|o_creat, 0644

);

if(-1 == (ret =fd))

//調整確定檔案共享記憶體的空間

ret =ftruncate(fd, file_size);

if(-1 ==ret)

//對映目標檔案的儲存區

map_addr = mmap(null, file_size, prot_read|prot_write, map_shared, fd, 0

);

if(null ==map_addr)

if (param > 0)

else

//取消對映

ret =munmap(map_addr, file_size);

if(-1 ==ret)

if (param > 0

) }

_out:

return

ret;

}#endif

#if t_desc("global", 1)

void

usage()

int main(int argc, char **ar**)

int tu = atoi(ar**[1

]);

if (tu == 1) ret = tu1_proc(argc - 1, &ar**[1

]);

return

ret;

}#endif

#if t_desc("readme", 1)

/*1, how to compile

gcc -o shm.out shm.c -lrt

*/#endif

程序間通訊 共享記憶體

下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...

程序間通訊 共享記憶體

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...

程序間通訊 共享記憶體

共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...