c - 如何在 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);
解决方案
推荐阅读
- python - 使用 Pandas 和 Numpy 优化 Vanilla Python
- python - 为什么 mypy 不能区分通用 python 类中的 Qt 小部件类型?
- blazor - 从 ASP.NET Web App 到 Blazor 需要替换 Microsoft.AspNet.FriendlyURL
- react-native - 尝试在 vanilla React Native 项目中解决 @expo/vector-icons/FontAwesome 时出错
- javascript - 通过 html 读取和写入 json 而不使用 php
- scikit-learn - 如何在谷歌 colab 中安装 pyearth?
- ssms - SSMS 扩展在某些机器上启动缓慢
- amazon-web-services - 在 AWS Cloud9 中,是否可以通过实例元数据或 cli 知道使用会话的人的用户名?
- javascript - compress.js 直接在 uwsgi 下而不是 nginx 下制作 CACHE
- java - 一旦 ArrayLists 无法再合并,如何退出 while 循环?