进程间通信

御凉风 2010-10-28 09:56:57
编写两个程序mysem.c(编译后为mysem)和myinput.c(编译后为myinput),实现两个程序(进程)之间的通信。要求如下:
1、 mysem创建一个共享内存myshm(共享内存ID,内存大小为512字节),供mysem和myinput共享
2、 mysem创建一个子进程,该子进程加载myinput
3、 myinput从键盘以追加方式向myshm中输入信息(字符型),mysem接收信息并显示在屏幕上
4、 当myinput从键盘输入“end”并存入myshm后,myinput结束(退出),mysem收到“end”显示后,也退出,并释放所有的资源。
--
这里有些不会,就是如何让接收的程序随输入的程序同步显示输入的信息,我只知道如何让接收的程序一次输出所有输入的内容而已。大家指点一下吧。
谢谢
答案好的,我一定给分的,90分。
...全文
306 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
heykuku 2011-10-25
看不懂= =
回复
luojieyong 2011-04-27
后面的myinput我也写了个~但是不知道为什么不能接收输出,求指教
回复
cr4315 2010-10-28
这样做挺麻烦的,如果是要接收同步可以用信号消息管道等方式处理比较方便。
回复
suyangwei 2010-10-28
没编过这个
回复
justkk 2010-10-28
你这个需求用消息队列比共享内存合适
如果用共享内存,你说的“接收”方可能要轮询共享内存中的数据,并且还要记录上次的读取位置..
或者还得通过其它方式被告知..
总之麻烦

用消息队列ok
回复
御凉风 2010-10-28
这个是本人想出来的,以下是mysem.c的源代码:另一个myinput.c比较简单,就不上传了,想了解的,留言于我。谢谢大家的回答
一起加油!!
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/shm.h>

#define SIZE 512

main()
{
int myshm;
char *viraddr;
int p;
char cmp[SIZE];

myshm=shmget(1234,SIZE,0666|IPC_CREAT);
viraddr=(char *)shmat(myshm,0,0);

while((p=fork())==-1);
if(p==0)
{
while(1)
{
if(strcmp(cmp,viraddr)!=0)
{
strcpy(cmp,viraddr);
printf("目前的信息为:\n%s",viraddr);

}
if(strstr(viraddr,"end"))
{
printf("");
break;
}

}
exit(0);
}
else
{
wait(0);

shmdt(viraddr);
shmctl(myshm,IPC_RMID,0);
wait(0);
exit(0);
}
}
回复
sfd1234 2010-10-28
我也学习学习!管道挺好使!
回复
相关推荐
发帖
Linux_Kernel
创建于2007-08-27

4147

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2010-10-28 09:56
社区公告
暂无公告