Pointers 在多个分叉进程之间共享指针

Pointers 在多个分叉进程之间共享指针,pointers,process,fork,share,shared-memory,Pointers,Process,Fork,Share,Shared Memory,如果我想在fork()之间共享像char**keysarray这样的东西'd进程使用shm_open和mmap我可以将指向键的指针粘贴到共享内存段中,还是必须将键中的所有数据复制到共享内存段中?所有要共享的数据都必须在共享内存段中。这意味着指针和字符串都必须在共享内存中 共享包含指针的内容可能会很麻烦。这是因为mmap不能保证给定的映射将在所需的地址中结束 您仍然可以通过两种方法来实现这一点。首先,你可以用mmap试试运气,希望动态链接器不会在你喜欢的地址加载东西 第二种方法是使用相对指针。在指

如果我想在
fork()之间共享像
char**keys
array这样的东西
'd进程使用
shm_open
mmap
我可以将指向
键的指针粘贴到共享内存段中,还是必须将
键中的所有数据复制到共享内存段中?

所有要共享的数据都必须在共享内存段中。这意味着指针和字符串都必须在共享内存中

共享包含指针的内容可能会很麻烦。这是因为mmap不能保证给定的映射将在所需的地址中结束

您仍然可以通过两种方法来实现这一点。首先,你可以用mmap试试运气,希望动态链接器不会在你喜欢的地址加载东西

第二种方法是使用相对指针。在指针内部,不是存储指向字符串的指针,而是存储指针地址和字符串地址之间的差异。像这样:

char **keys= mmap(NULL, ...);
char *keydata= (char*) keys + npointers * sizeof(char*);
strcpy(keydata, firstring);
keys[0]= (char*) (keydata - (char*) &keys[0]);
keydata+= strlen(firststring)+1;
如果要从另一个进程访问字符串,请执行相反的操作:

char **keys= mmap(NULL, ...);
char *str= (char*) (&keys[0]) + (ptrdiff_t) keys[0];
这有点麻烦,但不管mmap返回什么,它都能工作