云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > linux实验报告

linux实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/6/8 3:06:00

(1) 使用vi命令编写程序pipe0.c: main() {

int fd[2];

char OutPipe[100],InPipe[100]; pipe(fd);

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

lockf(fd[1],1,0);

sprintf(OutPipe,“child 1 is sending message!”); /*把串放入数组outpipe中*/

write(fd[1],OutPipe,50); /*把串放入数组outpipe中*/ sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else {

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

lockf(fd[1],1,0); /*互斥*/ sprintf(OutPipe,“child 2 is sending message!”); write(fd[1],OutPipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else {

wait(0); /*同步*/

read(fd[0],InPipe,50); /*从管道中读长为50字节的串*/ printf(“%s\\n”,InPipe); wait(0); } } }

(2)运行结果:

21

在显示结果时:

child 2 is sending message!(延迟5秒后显示) child 1 is sending message!(再延迟5秒) (3)分析原因:

本实验利用函数pipe()建立通信管道,两个子进程分别向管道写入信号,父进程读取管道信号在显示,管道的写入操作分别加锁实现互斥操作。子进程1先建立,所以第一次读取的管道信号是子进程发来的,等待子进程1终止后再从管道读取信号,此时的信号是子进程2发来的。由于管道通信的互斥、同步等通信机制,执行结果不会再出现随机性。 2.在父进程中用pipe()建立一条管道线,往管道里写一句话,两个子进程接收这句话。 (1) 使用vi命令编写程序pipe1.c: main() {

int fd[2];

char OutPipe[100],InPipe[100]; pipe(fd);

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

{ sleep(2);

lockf(fd[0],1,0); read(fd[0],InPipe,50);

printf(\ printf(\

lockf(fd[0],0,0); exit(0); } else {

while((pid2=fork())==-1); if(pid2==0 ) { sleep(2); lockf(fd[0],1,0); read(fd[0],InPipe,50);

printf(\ printf(\

22

lockf(fd[0],0,0); exit(0); } else {

lockf(fd[1],1,0);

sprintf(OutPipe,\ write(fd[1],OutPipe,50); lockf(fd[1],0,0); sleep(5); wait(); sleep(5);

wait(); exit(0); } } }

(2)运行结果:

(3)分析原因:

本实验利用函数pipe()在父进程中建立通信管道,两个子进程分别接收来自父进程的写入信号。子进程1先建立,所以第一次读取的管道信号是子进程发来的,等待子进程1终止后再从管道读取信号,此时的信号是子进程2发来的。

二、流程图

开始 初始化变量 创建子进程pid1 否 子进程pid1创建是否成功? 是 当前是父进程? 否 创建子进程pid2 否 23 子进程pid2创建是否成功? 是 写入管道打印

三、实验总结

本次实验在编写程序pipe.c时,利用函数pipe()建立通信管道,两个子进程分别向管道写入信号,父进程读取管道信号在终端显示。在编写程序pipe1.c时,利用函数pipe()在父进程中建立通信管道,两个子进程分别接收来自父进程的写入信号。按照实验要求,发现两次的调试结果居然一样。我总结出此次实验主要是利用函数pipe()建立通信管道,子进程或父进程从通信管道读取信号然后在终端显示出来。

(四)消息的发送与接收实验

【实验目的】

1.了解什么是消息。 2.熟悉消息传送机理。 3.编程实现消息的发送与接收。

【实验内容】

一、消息的发送与接收

1.消息的创建、发送和接收。使用系统调用msgget( ),msgsnd( ),msgrev( ),及msgctl( )编制一长度为1k的消息发送和接收的程序。 (1) 使用vi命令编写程序client.c和server.c: ①client.c

void client()

24

搜索更多关于: linux实验报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(1) 使用vi命令编写程序pipe0.c: main() { int fd[2]; char OutPipe[100],InPipe[100]; pipe(fd); while((pid1=fork())== -1); if(pid1= =0) { lockf(fd[1],1,0); sprintf(OutPipe,“child 1 is sending message!”); /*把串放入数组outpipe中*/ write(fd[1],OutPipe,50); /*把串放入数组outpipe中*/ sleep(5); /*自我阻塞5秒*/ lockf(fd

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com