使用POSIX标准将结构复制到C中的共享内存

时间:2015-08-23 10:15:32

标签: c struct posix shared-memory

我需要访问不同进程之间的结构。 有没有办法将结构复制到共享内存中,然后在其他一些进程中访问相同的结构。(使用POSIX标准)

我的结构是

typedef struct binary_semaphore {
    pthread_mutex_t mutex;
    sem_t *sem;
} binary_semaphore;

2 个答案:

答案 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包含一个互斥锁和一个指向信号量的指针。他们自己进程间通信工具!只需从其他进程访问它们并直接使用它们。