Linux管道通信【操作系统】利用pipe
实验内容:
编写一程序,建立一个管道。同时,父进程生成子进程 p1,p2,这两个子进程分别向管道中写入各自的字符串,父进程读出它们。
实验相关的系统调用:
(1)pipe的创建
pipe(fd)<其中fd是文件对象数组指针>
fd[0]:pipe 的出口, 控制读操作
fd[1]:pipe 入口, 控制写操作
(2)pipe的读写
写操作:write(fd[1],buf,size)buf:存放消息的空间,size :要写入的字符长度
读操作:read(fd[0],buf,size)buf:存放消息的空间,size :要读出的字符长度
<important>:pipe读写存在互斥现象,读写不可同时进行,因此需要限制互斥操作
(3)int lockf(int files,int function,long size)
作用:LOCKF主要是给文件上锁。当p2进程想要访问文件是或者给文件上锁,那么就要等待p1释放锁,此时p2处于睡眠状态但当p1解开锁时,p2就可以向管道中写入数据。其目的在于控制p1、p2同时向管道中写入数据。
files是文件描述符;
function是锁定和 解锁;1 表示锁定,0 表示解锁;
size是锁定和解锁的字节数,若用 0,表示从文件的当前 位置到文件尾
实验环境:ubantu_vim
实验代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int main(){int i,r;int p1;int p2;int p3;int fd[2];char buf[50];char s[50];pipe(fd); //create a pipewhile((p1=fork())==-1); //create a child c1if(p1==0){//child1 processlockf(fd[1],1,0); //ban others to writesprintf(buf,"messages from child process p1!\n"); //store char into bufprintf("child process p1!\n");write(fd[1],buf,50); //write buf into pipesleep(5); //let parent process read pipelockf(fd[1],0,0); //realse writeexit(0);}else{//parent processwhile((p2=fork())==-1);//create a child cif(p2==0){//child2 processlockf(fd[1],1,0);sprintf(buf,"messages from child process p2!\n");printf("child process p2!\n");write(fd[1],buf,50);sleep(5);lockf(fd[1],0,0);exit(0); //c2 exit}else{//parent processwhile((p3=fork())==-1);if(p3==0){//child processlockf(fd[1],1,0);sprintf(buf,"messages from child process p3!\n");printf("child process p3!\n");write(fd[1],buf,50);sleep(5);lockf(fd[1],0,0);exit(0);}wait(0); //get the p1 exit messageif(r=read(fd[0],s,50)==-1)printf("can't read pipe\n");else printf("%s\n",s);wait(0);if(r=read(fd[0],s,50)==-1)printf("can't read pipe\n");else printf("%s\n",s);wait(0);if(r=read(fd[0],s,50)==-1)printf("can't read pipe\n");else printf("%s\n",s);exit(0);}}
}
实验结果:
源文件文件名:mulpipe.c
可执行文件名:mulpipe
Linux管道通信【操作系统】利用pipe相关推荐
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- linux管道通信 半双工通信
本文转载自:http://blog.sina.com.cn/s/blog_5ed3e6210100d87d.html 在windows里进程间的通信主要用到是的消息,而在Linux里管道通信是一个不错 ...
- 实验9Linux共享内存通信,操作系统原理与Linux实践教程(卓越工程师培养计划系列教材)...
导语 由申丰山和王黎明共同编著的<操作系统原理与Linux实践教程(卓越工程师培养计划系列教材)>一书理论与实践并重,全面.系统地阐述了操作系统的重要概念和原理,深入.细致地剖析了操作系统 ...
- 实验四:《操作系统》之管道通信
Part4. 管道通信 往期回顾: Part0. 实验环境 Part1-1.熟悉UKylin环境 Part1-2.熟悉UKylin环境 Part2.进程控制 Part3.进程通信 一.实验目的 1.了 ...
- linux下进程间管道通信,Linux下进程间通信方式-管道
本文关键字: linux 管道通信,linux 进程通信方式,无名管道,有名管道 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入.Linux的管道主要包括两种:无 ...
- Linux进程通信(一)——pipe管道
本章内容 采用pipe管道如何进行进程之间的通信 pipe管道进程通信的规则和限制 Linux中pipe管道的实现机制和管理pipe管道的结构体 什么是进程通信 进程通信就是两个进程之间进行数据交换, ...
- 【操作系统实验】Linux进程通信—共享内存通信、管道通信
Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...
- Linux操作系统实验系列之实验四管道通信
一.实验目的 1.了解什么是管道 2.熟悉UNIX/LINUX支持的管道通信方式 二.实验内容: 编写程序实现进程的管道通信.用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句 ...
- linux 进程和线程或线程和线程之间通过管道通信(pipe)
linux 进程和线程或线程和线程之间通过管道通信(pipe) 转自:http://blog.csdn.net/robertkun/article/details/8095331 线程间通信: [cp ...
最新文章
- 每日起床前做这五个动作,可保障你终身不感冒——奥运福娃设计师韩美林老师亲测可用
- NEU 1040 Count
- iGrimace IG 各版本区别
- python 网络编程_Python网络编程(六)
- 20 个最常用的 Git 命令用法说明及示例
- DOM操作案例之--全选与反选
- db2 语句包括不必要的列表_DB2 SQL0956C 数据库堆中没有足够的处理空间可用来处理此语句...
- linux find 用法详解 + 实例
- 安卓移动应用开发实例_移动应用开发协会纳新 ||掌握信息,赢得未来
- P1117 [NOI2016]优秀的拆分
- oracle sql 正则表达式
- Loadrunner教程
- 微信、米聊等国内kik类手机通信录互动应用前景探讨
- 【python】python读取命令行选项参数
- 使用谷歌浏览器查看ws消息
- AI绘画网站最全收集!!
- 用while循环写四叶玫瑰数(自幂数)
- typescript中的类型type与接口interface
- 高三计算机教学计划,高三信息技术上册教学计划参考
- Python 安装pyqt—tools失败,记录