(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函数实验报告,linux实验报告相关推荐

  1. linux 函数 缩小文件,linux文件系统的处理函数

    文件系统 通用:rename(原路径名,新路径名);  修改文件名 remove(路径名);     删除文件或路径 symlink(原路径名,符号链接名);   建立文件或路径的软链接 access ...

  2. linux 函数手册 在线,Linux系统API函数手册

    Linux系统API函数手册 (34页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 (一)文件操作篇 1.creat(建立文件)头文件1 ...

  3. linux 函数返回string,linux 下c函数strcmp的返回值疑问?

    linux 下c函数strcmp的返回值疑问? strcmp函数解释: NAME strcmp, strncmp - compare two strings SYNOPSIS #include int ...

  4. linux 函数 文件校验,Linux中的文件效验命令

    在网络传输.设备之间转存.复制大文件等时,可能会出现传输前后数据不一致的情况.这种情况在网络这种相对更不稳定的环境中,容易出现.那么校验文件的完整性,也是势在必行的. md5sum命令用于生成和校验文 ...

  5. linux 函数 增加用户,linux常用c函数用户组有哪些?

    endgrent(关闭组文件) 相关函数 getgrent,setgrent 表头文件 #include #include 定义函数 void endgrent(void); 函数说明 endgren ...

  6. linux函数进程撤销,Linux进程控制函数

    1. fork() #include #include pid_t fork(void); @一个进程可以调用fork函数创建一个新进程,由fork创建的进程被称为子进程,子进程是父进程的副本,它将获 ...

  7. linux系统进程控制实验报告,Linux进程控制实验报告.doc

    里奴性进程控制实验报告 实验名称: Linux进程控制 实验要求:一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结 ...

  8. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

  9. linux程序设计项目报告,Linux程序设计实验报告大作业

    Linux程序设计实验报告大作业 实 验 报 告 课程名称: LINUX程序设计 学 院: 计算机学院 专 业: 软件工程 班 级: 14-3 姓 名: 张正锟 学 号: 201401061038 2 ...

最新文章

  1. HTTP协议解析之Cookie
  2. Android ListView重写Adapter
  3. keep 虚拟路线修改器_keep儿童版下载-keep儿童模式6.124.0手机版下载
  4. zabbix如何添加图表显示内容_Zabbix图表出现中文乱码解决方案
  5. PHP的php://
  6. 信息学奥赛一本通(1244:和为给定数)
  7. java 拟合曲线_如何通过指数曲线拟合数据
  8. Mysql的数据库引擎 区别特点_mysql数据库存储引擎及区别
  9. linux修改py内容,python中修改文件行内容
  10. 关于阿里云OSS报错-java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException
  11. 为何python不好找工作-谁说Python找工作难?人生苦短,Python工程师你们还好吗?...
  12. sdut2355Binary Search Heap Construction
  13. 5)Thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove
  14. 2本学计算机好就业吗,今年高三了,感觉考不上2本了,想读个好点的大专将来好就业。学什么技术好呢,汽修,数控,计算机还是别的什么,求支招,毕业5年后打算自己开店的。...
  15. PBRT 阅读 第一章
  16. html背景图片大小嵌套,div嵌套div 背景图片 不显示的问题
  17. 精读《图解密码技术》--第一章 环游密码世界
  18. 测试oschina
  19. 基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析
  20. 安徽科技学院 信网学院网络文化节 孙晓楠

热门文章

  1. 用Tableau画可调整的树状图(Tree Diagram)
  2. hadoop学习--数据排序
  3. 深度学习100例 | 第53天:用YOLOv5训练自己的数据集(超级详细完整版)
  4. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例
  5. LeetCode-剑指 Offer 50. 第一个只出现一次的字符
  6. c#如何实现在两个窗体(Form)间传输数据或变量
  7. RxJava在闲鱼系统吞吐量提升上的实践
  8. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
  9. 高并发,高性能的一点调研
  10. 数学建模学习笔记——相关性分析