进程间通信

御凉风 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分。
...全文
349 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
我也学习学习!管道挺好使!

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧