- 111
- 0
- 约1.45千字
- 约 5页
- 2019-10-09 发布于广东
- 举报
实现工具
PC机一台,Putty软件
实现环境
Linux系统环境
实习内容(功能、目标)
功能:编写一段程序,使用系统调用pipe()创建一无名管道,同时父进程创建一个子进程p1;并使子进程通过管道向父进程传递数据“p1 process is sending data to father.”,父进程通过管道接收到该字符串后输出。
目标:(1)掌握系统调用pipe()的使用方法及其功能,理解管道通信原理;
(2)掌握利用系统调用exit()和wait()实现父进程与子进程之间的同步,理解同步的含义。
( 3 )创建无名管道,实现基于管道的进程间数据通信,
掌握管道通信的方法及特征;并进一步理解互斥与
同步的含义
实现的思想、方法和技术(含数据结构、算法)
本次实验通过系统调用用C语言实现了父进程创建一个子进程p1;并使子进程通过管道向父进程传递数据“p1 process is sending data to father.”,父进程通过管道接收到该字符串后输出。没有应用复杂的算法,只运用简单的数据结构fd数组。While循环保证了进程创建的成功。利用系统调用exit()和wait()实现父进程与子进程之间的同步,理解了同步的含义。
需要注意的是要在父进程与子进程之间通过管道同步传递数据,如果不同步而任意写入或读取数据结果会导致读出未更新数据即产生“读后写”问题。还应注意各子进程间利用lockf()加锁互斥向管道写入数据。
主要代码
注释
#include stdio.h
#include sys/types.h
#include unistd.h
int main()
{ int x,fd[2];
char buf[50],s[50];
pipe(fd);
while((x=fork())==-1);
if(x==0)
{ lockf(fd[1],1,0);
sprintf(buf,p1 process is sending data to father!\n);
write(fd[1],buf,50);
lockf(fd[1],0,0);
}
else
{
read(fd[0],s,50);
printf(%s,s);
}
}
系统函数头文件
系统函数头文件
fork函数头文件
创建管道fd
创建进程
创建子进程成功
将管道一端 fd[1]锁定
向缓冲区写入内容
向管道中写入数据
将管道一端 fd[1]解锁
退出
从管道中读出数据
打印输出
结果分析(含实现中出错原因分析)
在本实验中,主要目的是通过建立管道两个进程之间相互传递数据并进输出,需要注意的是在向管道中写数据或是读数据时要防止其他进程的干扰,所以在本实验中增加了加锁机制,有效地杜绝了这一问题。
指导教师评语、评分
评分:
指导教师:
年 月 日
您可能关注的文档
最近下载
- 2026年鹤壁职业单招试题完美版.docx VIP
- 日成RCCN端子系列.pdf VIP
- 2026湖北十堰市教育局直属高中招聘教师100人笔试模拟试题及答案解析.docx VIP
- 2025年互联网营销师搜索引擎广告平台与账户搭建专题试卷及解析.pdf VIP
- 2026湖北十堰市教育局直属高中招聘教师100人笔试备考题库带答案解析.docx VIP
- 浙江农林大学2023-2024学年《数据结构》期末试卷(A卷)及参考答案.docx
- 2026年鹤壁职业技术学院单招职业技能考试题库附答案详解.docx VIP
- 肺血栓栓塞症课件PPT.pptx VIP
- 2026年鹤壁职业技术学院单招职业适应性考试模拟测试卷附答案.docx VIP
- 2026年鹤壁职业技术学院单招职业倾向性测试题库附答案.docx VIP
原创力文档

文档评论(0)