我需要访问不同进程之间的结构。是否有办法将结构复制到共享内存中,然后在其他进程中访问相同的结构?(使用POSIX标准)
结构是
typedef struct binary_semaphore {
pthread_mutex_t mutex;
sem_t *sem;
} binary_semaphore;
想都别想!
如果你的结构只包含普通的旧数据(整数,浮点数,字符或数组),这一切都是好的:你可以访问共享内存段,用memcpy
复制结构体,然后你可以通过任何其他进程通过共享内存访问它。
一旦结构包含指向普通旧数据的指针,这就变得更加棘手了:你必须将普通旧数据复制到共享内存中,并用指向共享内存的id或共享内存段中的偏移量替换指针。
但是这里的结构包含一个互斥锁和一个指向信号量的指针。它们本身就是进程间通信工具!只要从其他进程获得访问权限并直接使用它们即可。
这取决于你有什么类型的句柄。
如果您有void*
…
memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));
如果你有int
从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));
如果你有一个int
从int shmget(key_t, size_t, int)
…
void *sharedMemory = shmat(myIntFromShmGet, NULL, 0);
memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));
希望这对你有帮助!