-
大小: 1.16 KB文件类型: .rar金币: 2下载: 0 次发布日期: 2024-08-13
- 语言: 其他
- 标签:
资源简介
进程的管道通信
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2
分别向管道各写一句话:
Child1 is sending a message!
Child2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的
消息,然后再接收子进程P2发来的消息。
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2
分别向管道各写一句话:
Child1 is sending a message!
Child2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的
消息,然后再接收子进程P2发来的消息。
代码片段和文件信息
#include
#include
#include
#define sum 50
char *message1 = “Child process1 is sending a message!“;
char *message2 = “Child process2 is sending a message!“;
main()
{
int p1p2; /*定义两个进程号参数*/
int a[2];
char b[50];
pipe(a); /*创建匿名管道,a[0]为读端,a[1]为写端*/
while ((p1=fork())== -1);
if(p1==0)
{
lockf(a[1]10); /*锁定管道写端,保证写入数据的完整性*/ write(a[1]message1sum); /*向管道写端a[1]写入message1中的数据,写完后该数据即可以从读端a[0]读出*/
sleep(3); /*等待读进程读出数据*/
lockf(a[1]00); /*解锁管道写端*/
exit(0);/* 子进程P1退出*/
}
else
{
while ((p2=fork())== -1);
if(p2==0)
{
lockf(a[1]10);
write(a[1]message2sum);
sleep(5); /*等待读进程读出数据*/
lockf(a[1]00);
exit(0); /* 子进程P2退出*/
}
else
{
wait(0); //等待某个子进程退出
read(a[0]bsum); /*从管道读端a [0]读取出P1或者P2写入的数据*/
printf(“%s\n“b);
wait(0); //等待第二个子进程退出
read(a[0]bsum);
printf(“%s\n“b);
exit(0); //父进程退出
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1376 2009-01-08 22:01 进程的管道通信\a4.c
文件 330 2009-03-13 20:23 进程的管道通信\进程的管道通信.txt
目录 0 2009-03-13 20:24 进程的管道通信
----------- --------- ---------- ----- ----
1706 3
- 上一篇:计算方法上机程序之龙贝格求积公式
- 下一篇:DE2模拟的交通红绿灯
评论
共有 条评论