首页 > 解决方案 > 如何在 C 中的共享内存中使用动态大小

问题描述

例如我有下面的结构

typedef struct myData{
  size_t fileSize;
  char* buffer; 
} myData;

缓冲区大小不同,可由用户决定。如何在两个进程之间的共享内存中使用这个结构?

// Reader 
sem_t lock
key_t key= ftok("/address", 1);
int shmID= shmget(key, size, IPC_CREAT | IPC_EXCL | 0666); //size can varied
myData* `buf = (myData*)shmat(shmID, 0, 0);

sem_init(&lock, 1, 0);
sem_wait(&lock)
//Process read
//writer
sem_t lock
key_t key= ftok("/address", 1);
int shmID= shmget(key, size, IPC_CREAT | IPC_EXCL | 0666); //size can varied
myData* `buf = (myData*)shmat(shmID, 0, 0);

//write to buf
char str[10] = "Hello";
buf->fileSize = 100;
memcpy(buf->buffer, str, 0);
sem_post(&lock);

标签: cshared-memory

解决方案


推荐阅读