c - 如何使用共享内存 C 语言在 struct 中启动动态数组
问题描述
我想问你,如何使用共享内存从键盘(argv)启动结构中的数组大小,我不能使用malloc,因为它启动了privat或类似的东西。
例如一段代码
结构与我想启动的数组
struct data
{
char txt[size from keyboard];
};
如何调整这个数组的大小,记住我们将使用共享内存 IPCV?
感谢您的帮助:)
编辑:
所以如果我在结构中有一个变量,我可以这样做吗?
struct data
{
int counter;
char *text;
}*shared data;
int shmid
int main(int argc, char* argv[])
{
int m = atoi(argv[1]) /* number of slots*/
int n = atoi(argv[2]) /*size of txt */
shmid = shmget(12345, m * n * sizeof(struct my_data), IPC_CREAT|)600|IPc_EXCL));
shared_data = (struct data*)shmat(shmid, NULL, 0);
/*So now Can I write to txt??? */
}
解决方案
txt
从更改char[]
为char*
,然后在知道所需大小后使用shm_open()
和分配共享内存。mmap()
typedef struct data
{
char *txt;
} data;
data d;
int shm_fd = shm_open("name", O_RDWR | O_CREAT);
d.txt = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
...
munmap(d.txt, size);
shm_unlink("name");
推荐阅读
- go - 调用 Google Apps 脚本
- javascript - 是否可以在设备级别而不是浏览器级别使用 javascript 生成指纹?
- data-structures - 通过删除/更新查找最小值的数据结构建议
- c - 在 C 的 sprintf 中添加 \
- javascript - 如何飞到反应传单中的位置
- npm - 无法在 WebStorm 中更改 npm 版本
- powerbi - Power Query (PowerBI) 解决多对多关系
- c# - 保存和加载场景统一
- python - 将操作应用于 numpy 数组中的行
- python - PythonAnywhere 来自 Python 的 Mysql 数据库