我需要访问不同进程之间的结构。 有没有办法将结构复制到共享内存中,然后在其他一些进程中访问相同的结构。(使用POSIX标准)
我的结构是
typedef struct binary_semaphore {
pthread_mutex_t mutex;
sem_t *sem;
} binary_semaphore;
答案 0 :(得分:1)
这取决于你拥有的手柄类型。
如果您有void*
...
memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));
如果您有int
的{{1}} ...
int shm_open(const char*, int, mode_t)
如果您有void *sharedMemory = mmap(NULL, mySharedMemorySize, PROT_READ | PROT_WRITE, MAP_SHARED, myIntFromShmOpen, 0);
memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));
的{{1}} ...
int
希望这有帮助!
答案 1 :(得分:1)
甚至没想到它!
如果你的结构只包含普通的旧数据(整数,浮点数,字符或它们的数组),那么一切都会好的:你可以访问共享内存段,用memcpy
复制结构,并且您可以通过共享内存通过任何其他进程访问它。
一旦结构包含指向普通旧数据的指针,它就变得更加棘手:您必须将普通旧数据复制到共享内存,并将带有ID的指针替换为共享内存或共享内存段中的偏移。 / p>
但是这里你的struct包含一个互斥锁和一个指向信号量的指针。他们自己进程间通信工具!只需从其他进程访问它们并直接使用它们。