我正在尝试使用shmget
和shmat
与其他分叉+执行过程分享一些内存:
char test[]="test";
int shID;
char *shptr;
key_t shkey = 2404;
shID = shmget(shkey, sizeof(char)*(strlen(test)+1), IPC_CREAT | 0666);
if (shID >= 0) {
shptr = shmat(shID, 0, 0);
if (shptr==(char *)-1) {
perror("shmat");
} else {
memcpy(shptr, &test, strlen(test)+1);
....
//forking and execing
....
shmdt(shptr);
}
} else {
perror("shmget");
}
这很好用。
问题是test[]
将是一个巨大的char*
。所以我喜欢轻松分享text[]
而不是复制它。有没有更好的方法来处理它?</ p>
答案 0 :(得分:0)
如果您可以读取要从文件和位置读取的文件大小或确切内存,则可以使用mmap将该部分文件映射到内存。