毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

进程的管道通信

更新时间:2008-12-24:  来源:毕业论文

进程的管道通信
实验项目名称 实验六:进程的管道通信
实验目的 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 <unistd.h>
#inlcude <signal.h>
#include <stdio.h>
   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.C
3、#./6 | > 6out
4、6out为程序输出
实验内容 #include <stdio.h>
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.cn
else
{
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

进程的管道通信下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©lwfree.cn 六维论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。