第一范文网 - 专业文章范例文档资料分享平台

操作系统上实验报告3

来源:用户分享 时间:2025/7/28 4:21:55 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

例程5:

管道通信的实验 #include #include main() {

int i,r,j,k,l,p1,p2,fd[2]; char buf[50],s[50]; pipe(fd);

while((p1=fork())==-1); if(p1==0)

lockf(fd[1],1,0); /*子进程1 执行*/ /*管道写入端加锁*/

sprintf(buf,\printf(\write(fd[1],buf,50); lockf(fd[1],0,0); /*信息写入管道*/ /*管道写入端解锁*/ sleep(5);

j=getpid(); k=getppid();

printf(\exit(0); } else

{ while((p2=fork())==-1); if(p2==0) {

lockf(fd[1],1,0); /*创建子进程2*/ /*子进程2 执行*/ /*管道写入端加锁*/

sprintf(buf,\printf(\write(fd[1],buf,50); lockf(fd[1],0,0); /*信息写入管道*/ /*管道写入端解锁*/ sleep(5); j=getpid(); k=getppid();

printf(\exit(0); } else

{ l=getpid(); wait(0);

if(r=read(fd[0],s,50)==-1) printf(\else

printf(\wait(0);

if(r=read(fd[0],s,50)==-1) printf(\else

printf(\exit(0); } } } }

运行结果:

思考:(1)什么是管道?进程如何利用它进行通信的?解释一下实现方法。

(2)修改睡眠时机、睡眠长度,看看会有什么变化。解释。 (3)加锁、解锁起什么作用?不用它行吗? 答:(1)管道是指能够连接一个写进程和一个读进程、并允许他们以生产者—消费者方式进行通信的一个共享文件,又称pipe文件。由写进程从管道的入端将数据写入管道,而读进程则从管道的出端读出数据来进行通信。

(2)修改睡眠时机和睡眠长度都会引起进程被唤醒的时间不一,因为睡眠时机决定进程在何时睡眠,睡眠长度决定进程何时被唤醒。

(3)加锁、解锁是为了解决临界资源的共享问题。不用它将会引起无法有效的管理数据,即数据会被修改导致读错了数据。

例程7:

软中断信号实验 #include #include main() {

int i,j,k; int func();

signal(18,func()); if(i=fork()) {

j=kill(i,18); /*创建子进程*/ /*父进程执行*/

/*向子进程发送信号*/

printf(\k=wait();

/*父进程被唤醒*/

printf(\} else

搜索更多关于: 操作系统上实验报告3 的文档
操作系统上实验报告3.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4eilt03j5w7b3ef98nfw_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top