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



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

结构是

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

想都别想!

如果你的结构只包含普通的旧数据(整数,浮点数,字符或数组),这一切都是好的:你可以访问共享内存段,用memcpy复制结构体,然后你可以通过任何其他进程通过共享内存访问它。

一旦结构包含指向普通旧数据的指针,这就变得更加棘手了:你必须将普通旧数据复制到共享内存中,并用指向共享内存的id或共享内存段中的偏移量替换指针。

但是这里的结构包含一个互斥锁和一个指向信号量的指针。它们本身就是进程间通信工具!只要从其他进程获得访问权限并直接使用它们即可。

这取决于你有什么类型的句柄。

如果您有void*

memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));

如果你有intint 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));

如果你有一个intint shmget(key_t, size_t, int)

void *sharedMemory = shmat(myIntFromShmGet, NULL, 0);
memcpy(sharedMemory, &myStruct, sizeof(struct MyStruct));

希望这对你有帮助!

最新更新