我无法在C语言中读取共享内存。

3

我有一个包含两个进程和两个文件的程序,我想通过共享内存读取第二个文件的代码中的变量,但我只能得到“testing”这个词,而不是文本。以下是程序的第一个文件的代码:

a=shmget(key, 200, 0666|IPC_CREAT);
text=(char *)shmat(a,0,0);
text=&words[0];
     if ((P2=fork())==1)
     {
     perror("fork");
     exit(-1);
     }
          if (P2==0)
          {
          execl("prog2","prog2",NULL);
          }

第二个文件的代码如下:

a=shmget(key, 200, 0666);
text=shmat(a,0,SHM_RDONLY);
printf("testing, %s", text);

有什么想法吗?谢谢。

1
同时 fork() == -1 不等于 1。 - Duck
1个回答

6
你从来没有往共享内存中放置任何东西;你只是将 text 的值更改为指向除了共享内存以外的其他地方。
不要这样写:

...

text=&words[0];

您可能需要类似以下的内容:

memcpy(text, &words[0], strlen(words[0]) + 1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接