3

shmget我正在尝试使用and与另一个分叉+执行的进程共享一些内存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[]而不是复制它。有没有更好的方法来处理这个?

4

1 回答 1

0

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

于 2013-09-23T05:53:05.923 回答