我有一个程序需要在两个进程之间共享字符串。我已经声明了一个包含数组的结构*char
。该结构体分配有shmget
and shmat
在主进程被分叉之前。
typedef struct Queue
{
int index;
char *directory[10];
} Queue;
在其中一个过程中,我尝试设置该值:(data->dir_name
is a *char
为字符串,例如“/data1”)
queue->directory[i] = data->dir_name; // Option 1
queue->directory[i] = "foo"; // Option 2
我的问题是,上面的第一条和第二条有什么区别?设置时queue->directory[i]
to "foo"
,其他进程看到它。然而,传递值data->dir_name
, 它不是。
提前致谢!
问题是您只分配了一个指针,而不是复制字符串数据。在第一种情况下,您将值设置为指向第二个进程看不到的内存。当你执行第一行时,指针data->dir_name
被放入queue->directory[i]
,但是当另一个进程查看自己的内存空间中的该内存地址时,数据不在那里。另一方面,第二行放置静态字符串的地址"foo"
到变量中。由于进程是从同一源编译的,因此该字符串位于每个进程内存中的同一位置,因此第二个进程可以看到它。
你想要做的是在你的结构中有一个缓冲区strcpy
目录名放入.你需要
char directory[10][200];
and
strcpy (queue->directory[i], data->dir_name);
您需要检查字符串长度是否小于 200(在本例中),如果太长则报告相应的错误。我不熟悉共享内存函数,无法确切知道如何执行malloc
相等的;如果你能做到的话;然后你可以将字符串复制到malloc
ed 共享内存并将指向它的指针放入数组中,就像您在代码中一样。不过,从非常快速的谷歌搜索看来,malloc
像这样的共享内存可能不会很好地工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)