0
假設我有一個緩衝液:故障寫入共享存儲器緩衝區用C
int * buffer;
和這個緩衝器與多個進程(共享存儲器)共用。
如果我想從/到該緩衝區讀取/寫入,我該怎麼做?
我在問這是因爲我發現很多的信息和各種不同的方法來解決這個問題,但答案缺乏組織,並變得非常混亂,難以理解。
下面是我用來創建共享內存段的功能:
void * create_shared_memory(char *name, int size) {
int *ptr;
int ret;
int fd = shm_open (name, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (fd == -1) {
perror ("shm_open error!");
exit (1);
}
ret = ftruncate (fd, sizeof (size));
if (ret == -1) {
perror ("ftruncate error!");
exit (2);
}
ptr = mmap(0, sizeof (size), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
perror ("shm-mmap error!");
exit (3);
}
return ptr;
}
內存如何共享?你使用'pthread',OpenMP還是其他?還是你的意思是內存需要跨代碼共享? – wolfPack88 2015-03-31 14:45:03
@ wolfPack88我編輯過! – laker001 2015-03-31 14:46:45
有什麼問題?一旦你使用了'mmap',你就可以像往常一樣訪問內存。 – teppic 2015-03-31 14:55:12