#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 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...