使用共享内存将字符串从进程发送到进程

时间:2014-03-27 20:50:04

标签: c ipc shared-memory

我是共享内存的新手,我尝试过这些代码将一个字符串从进程发送到另一个进程,当另一个进程重新生成该字符串时,它将共享内存中的第一个字符设置为&# 39;一个'性格。但是当我想运行其中一个时,我会得到分段错误消息:

     #include <stdlib.h>
        #include<stdio.h>
        #include <string.h>
        int main(int argc , char *argv[])
        {
            key_t key = 111 ;
            int id = shmget(key , 512 , 1 | 0666);
            char *s  = shmat(id  , 0 , 0) ; 
            strcpy(s,argv[1]) ; 
            while(*s == 'a') sleep(1) ;
            return 0 ;
        }
   // and this is the code for reciever >     
        #include <stdlib.h>
        #include<stdio.h>
        int main(int argc , char *argv[])
        {
            key_t key = 111 ;
            int id = shmget(key , 512 , 1 | 0666);
            char* shm = shmat(id , 0 , 0 ) ;
            char *s = shm ; 
            for(s =  shm; *s != NULL ; s++ )
                putchar(*s) ;
            *s = 'a' ;
            return 0 ;
        }

2 个答案:

答案 0 :(得分:1)

我解决了,我包括以下库 - &gt;并且,将shmget函数的最后一个输入更改为IPC_CREAT | 0666

答案 1 :(得分:0)

看起来在你的for循环中,你正在增加你的's&#39;变量,所以你实际上并没有将字符串的第一个字符设置为&#39; a&#39;而是将空终止符设置为&#39; a&#39;。

尝试更改

*s = 'a';

*shm = 'a';