• 大小: 1.16 KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-08-13
  • 语言: 其他
  • 标签:

资源简介

进程的管道通信
编制一段程序,实现进程的管道通信,使用系统调用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


评论

共有 条评论