c语言进程通信的一点问题

#include<unistd.h>#include<sys/ipc.h>#include<sys/shm.h>#include<errno.h>#defineKEY12... #include<unistd.h>

#include<sys/ipc.h>

#include<sys/shm.h>

#include<errno.h>

#define KEY 1234/*键*/

#define SIZE 1024/*欲建立的共享内存的大小*/

int main()

{

int shmid;

char *shmaddr;

struct shmid_ds buf;

shmid=shmget(KEY,SIZE,IPC_CREAT|0600);/*建立共享内存*/

if(shmid==-1)

{

printf("create share memory failed:%s",strerror(errno));

return 0;

}

if(fork( )==0)/*子进程*/

{
printf("In son process");

shmaddr=(char*)shmat(shmid,NULL,0);

if(shmaddr==(void*)-1)/*系统自动选择一个地址连接*/

{

printf("connect to the share memory failed:%s",strerror(errno));

return 0;

}

/*向共享内存内写数据*/
printf("father is writing the membery\n");

strcpy(shmaddr,"this text is written by son.\n");

shmdt(shmaddr);/*断开共享内存*/

exit(0);/*断开共享内存*/

}

else/*父进程*/

{
printf("In father process\n");

wait(0);

shmctl(shmid,IPC_STAT,&buf);/*取得共享内存的相关信息*/

shmaddr=(char*)shmat(shmid,NULL,0);

/*系统自动选择一个地址连接*/

if(shmaddr==(void*)-1)

{

printf("connect the share memory failed:%s",strerror(errno));

return 0;

}

printf("father is reading the membery\n");

printf("%s\n",shmaddr);

printf("father is writing the membery\n");

strcpy(shmaddr,"this text is written by father.\n");

shmdt(shmaddr);

/*断开共享内存*/

/*当不再有任何其它进程使用该共享内存时系统将自动销毁它*/

shmctl(shmid,IPC_RMID,NULL);

}

}

我想达到的目的是:子进程先将子进程号写入共享内存,父进程将内容读出并显示。随后,父进程将父进程号写入同一块共享内存,要求子进程读出并显示。 想用信号量的方法写的 但是也不知道怎么写...
展开
 我来答
百度网友f97298c
2013-06-02
知道答主
回答量:10
采纳率:0%
帮助的人:14.8万
展开全部
用简单同步就行了 不需要弄这么复杂的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式