首页 > 解决方案 > 如何使用共享内存 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??? */


}

标签: clinuxshared

解决方案


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");

推荐阅读