首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

不同进程间用共享内存通信的有关问题,求解

2012-09-07 
不同进程间用共享内存通信的问题,求解我先说下问题,用两块共享内存可以实现不同的两个进程的通信,下面是我

不同进程间用共享内存通信的问题,求解
我先说下问题,用两块共享内存可以实现不同的两个进程的通信,下面是我的代码,求大神看看,怎么只有单方面的接收与发送!!!!

C/C++ code
#include<stdio.h>#include<sys/ipc.h>#include<sys/shm.h>#include<sys/types.h>#include<string.h>int main(){    key_t key,key1;    pid_t pid;    int shm_id,shm_id1;        key = ftok( ".", 0x12);    key1 = ftok( ".", 0x50);    //printf("%d %d\n",key,key1);    if(key<0)    {        perror("the key:");    }    shm_id = shmget( key, 1024, IPC_CREAT);    shm_id1 = shmget( key1, 1024, IPC_CREAT);    if(shm_id<0)    {        perror("the share memory:");    }    if(pid<0)    {        perror("the son of process:");    }    if(pid==0)    {        char *ptr;        ptr = shmat( shm_id1 ,NULL ,0);          //是不是这里的NULL 的问题,如果指定 怎么指定        while(1)        {                        fputs(ptr,stdout);                sleep(1);                //bzero(ptr,1024);                }    }    if(pid>0)    {       char *str;        str = shmat( shm_id, NULL, 0);            while(1)        {                             char buf[1024];                bzero(buf,sizeof(buf));                fgets(buf,sizeof(buf),stdin);                strcpy(str,buf);                            }    }    return 0;}

C/C++ code
#include<stdio.h>#include<sys/ipc.h>#include<sys/shm.h>#include<sys/types.h>#include<string.h>int main(){    key_t key,key1;    pid_t pid;    int shm_id,shm_id1;        key = ftok( ".", 0x12);    key1 = ftok( ".", 0x50);    //printf("%d %d\n",key,key1);    if(key<0)    {        perror("the key:");    }    shm_id = shmget( key, 1024, IPC_CREAT);    shm_id1 = shmget( key1, 1024, IPC_CREAT);    if(shm_id<0)    {        perror("the share memory:");    }    if(pid<0)    {        perror("the son of process:");    }    if(pid==0)    {        char *ptr;        ptr = shmat( shm_id1 ,NULL ,0);        while(1)             {                                                     char buf1[1024];                bzero(buf1,sizeof(buf1));                fgets(buf1,sizeof(buf1),stdin);                strcpy(ptr,buf1);           //write to shm_id1                    }    }    if(pid>0)    {        char *str;        str = shmat( shm_id, NULL, 0);            while(1)        {                fputs(str,stdout);               //read from shm_id            //bzero(str,1024);                sleep(1);                            }    }    return 0;}


[解决办法]
程序貌似没有什么问题。

以下是我的猜测:
你在一个终端下执行了这两个程序。
如果是这样,问题出在你的两个进程都从标准输入中读取,然后写到共享内存。因为在终端环境下,只有一个程序可以称为前台进程而获得标准输入。因此,你需要在两个终端下分别执行这两个程序。

热点排行
Bad Request.