网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

进程的管道通信

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
进程的管道通信实验项目名称 实验六:进程的管道通信实验目的 1、了解什么是管道2、熟悉UNIX/LINUX支持的管道通信方式实验要求 1、熟悉管道的原理和应用2、掌握pipe(),read(),write()等函数的应用3、掌握进程间管道通信实验原理 1、pipe( )建立一无名管道。系统调用格式              pipe(filedes)参数定义int  pipe(filedes);int  filedes[2];其中,filedes[1]是写入端,filedes[0]是读出端。该函数使用头文件如下:#include #inlcude #include    2、read( )  系统调用格式                  read(fd,buf,nbyte)  功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。  参数定义                  int  read(fd,buf,nbyte);                  int  fd;                  char *buf;                  unsigned  nbyte;  3、write( )系统调用格式                 write(fd,buf,nbyte)功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。参数定义同read( )。实验仪器 装linux的pc一台实验步骤 1、根据参考6.C写入linux中2、#gcc -o 6 6.C3、#./6 | > 6out4、6out为程序输出实验内容 #include main(){int i,r,p1,p2,fd[2];char buf[50],s[50];pipe(fd); /*创建匿名管道,fd[0]为读端,fd[1]为写端*/while((p1=fork())==-1); /*创建子进程P1,直至成功为止(p1!=-1)*/if(p1==0) /*子进程P1执行逻辑*/{lockf(fd[1],1,0); /*锁定管道写端,保证写入数据的完整性*/sprintf(buf,"child process P1 is sending messages!\n"); /*在buf中填入准备写入管道的信息数据*/printf("child processP1!\n"); /*打印“子进程P1正在运行”*/write(fd[1],buf,50); /*向管道写端fd[1]写入buf中的数据,写完后该数据即可以从读端fd[0]读出*/sleep(5); /*睡眠5秒*/lockf(fd[1],0,0); /*解锁管道写端*/exit(0); /*子进程P1退出*/}else /*主进程的执行逻辑*/{while((p2=fork())==-1); /*创建第二个子进程P2*/if(p2==0) /*子进程P2的执行逻辑*/{lockf(fd[1],1,0); /*锁定管道写端,保证数据写入完整*/sprintf(buf,"child process P2 is sending messages!\n"); /*在buf中填入准备写入管道的信息数据*/printf("child processP2!\n"); /*打印“子进程P2正在运行”*/write(fd[1],buf,50); /*向管道写端fd[1]写入buf中的数据,写完后该数据即可从读端fd[0]读出*/sleep(5); /*睡眠5秒*/lockf(fd[1],0,0); /*解锁管道写端*/exit(0); /*子进程P2退出*/}/*以下为主进程执行逻辑*/wait(0); /*等待某个子进程退出*/if(r=read(fd[0],s,50)==-1) /*从管道读端fd[0]读取P1或者P2写入的数据(视哪个子进程抢先执行到lockf函数)*/lwfree.cnelse{printf(:%s\n",s); /*打印出读到的信息数据*/}wait(0); /*等待第二个子进程退出*/if(r=read(fd[0],s,50)==-1) /*从管道读端fd[0]读取出P1或者P2写入的数据(视哪个子进程后执行到lockf函数)*/{printf(:can't read pipe\n"); /*读取失败,打印错误信息*/}else{printf(:%s\n",s); /*打印读取到的信息数据*/}exit(0); /*主进程退出*/}}实验数据 延迟5秒后显示child 1 process is sending message!再延迟5秒child 2 process is sending message!实验总结 Linux系统在os的发展商,最重要的贡献之一便是该系统首创了管道(pipe)。这也是Linux系统的一大特色。1、sleep(5);语句是延迟5秒以保证数据完全写入管道内。     2、因为他们都继承了父进程的所有。178
  • 下一篇资讯: 进程间通信
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师