如何与其他进程共享现有的char *?

我正在尝试使用shmgetshmat与其他forked + execed进程共享一些内存:

 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[]而不是复制它。有没有更好的方法来处理它?

如果您可以读取要从文件和位置读取的文件大小或确切内存,则可以使用mmap将该部分文件映射到内存。