如何使用共享内存C语言在struct中启动动态数组
我想问你们,如何使用共享内存在struct中为键盘大小(argv)初始化数组,我不能使用malloc,因为它是private之类的 例如一段代码 我要初始化的带数组的结构 记住我们将使用共享内存IPCV,如何调整此阵列的大小 感谢您的帮助:) 编辑: 如果我在struct中还有一个变量,我可以这样做吗如何使用共享内存C语言在struct中启动动态数组,c,linux,shared,C,Linux,Shared,我想问你们,如何使用共享内存在struct中为键盘大小(argv)初始化数组,我不能使用malloc,因为它是private之类的 例如一段代码 我要初始化的带数组的结构 记住我们将使用共享内存IPCV,如何调整此阵列的大小 感谢您的帮助:) 编辑: 如果我在struct中还有一个变量,我可以这样做吗 struct data { int counter; char *text; }*shared data; int shmid int main(int argc, char*
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结构数据
{
char*txt;
}数据;
数据d;
int shm_fd=shm_open(“name”,O_RDWR | O_CREAT);
d、 txt=mmap(空,大小,保护读取,保护写入,映射共享,shm\u fd,0);
...
munmap(d.txt,大小);
shm_取消链接(“名称”);
是否可以在IPCV中使用它?我问,因为shm_open和mmap是POSIX@Roundstic我不知道IPCV是什么,System V IPC,System V有另一个用于共享内存的API,所以只需将我的示例中的shm_open()
/mmap()
/munmap()
/shm_unlink()
替换为//。
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??? */
}