Linux---管道通信的使用
匿名管道的操作
只能在具有亲缘关系的进进程之间进行通信。
int pipe(int pipefd[2])
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>int main()
{int pipefd[2] = {-1};int ret = pipe(pipefd);if(ret < 0){perror("pipe error");return -1;}pid_t pid = fork();if(pid == 0){char buf[1024];read(pipefd[0],buf,1023);}else if(pid > 0){char *str = "hello";write(pipefd[1],biff,str);}return 0;
}
命名管道的操作:
支持同一个主机中的不同进行之间进行访问。
int mkfifo(char* name, mode_t mode)
//管道名称与权限。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h> //命名管道
#include<errno.h> //错误处理
#include<fcntl.h> //文件操作int main()
{umask(0); //设置权限信息//mkfifo(命名管道名称,管道操作权限)int ret = mkfifo("./test_fifo",664);if(ret < 0 && error != EEXIST) //创建失败或者已经存在{perror("mkfifo error");return -1;}int fd = open("./test.fifo",O_RDONLY); //以只读的方式打开文件if(fd < 0){perror("open fifo error");return -1;}return 0;
}
注意
文件以只读的方式打开,则会被阻塞,直到文件用写的方式进行打开。
文件以只写的方式打开,则会被阻塞,直到文件用读的方式打开。
管道的读写特性:
- 管道是半双工通信,可选择方向进行数据传输。
- 如果管道中没有数据则read会阻塞,如果管道中的数据已经写满了,则write会阻塞。
- 如果管道的写端出现异常,则读端读完管道中的数据后,返回0不在阻塞。
- 如果管道的读端被关闭,则写段报错。
- 管道的生命周期随进程,当操作管道的所有进程都被退出,则管道被释放。
- 管道提供字节流传输服务,不会读取相同的数据。
- 管道自带同步与互斥。
管道自带同步与互斥
同步: 通过条件判断实现对临界资源访问的时序合理性。体现在管道中为管道的读写特性
互斥: 通过唯一访问实现对临界资源访问的安全性。管道的读写操作在PIPE_BUF中保证了原子性。
Linux---管道通信的使用相关推荐
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- linux管道通信 半双工通信
本文转载自:http://blog.sina.com.cn/s/blog_5ed3e6210100d87d.html 在windows里进程间的通信主要用到是的消息,而在Linux里管道通信是一个不错 ...
- Linux管道通信【操作系统】利用pipe
实验内容: 编写一程序,建立一个管道.同时,父进程生成子进程 p1,p2,这两个子进程分别向管道中写入各自的字符串,父进程读出它们. 实验相关的系统调用: (1)pipe的创建 pipe(fd)< ...
- linux下进程间管道通信,Linux下进程间通信方式-管道
本文关键字: linux 管道通信,linux 进程通信方式,无名管道,有名管道 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入.Linux的管道主要包括两种:无 ...
- Linux进程通信之管道
进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件.管道.信号.共享内存.消息队列.套接字.命名管道等.但现在常用的进程间通信方式有: 管道 – 使用最简单 pipe 管道一般读写行为 F ...
- Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结
Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...
- linux进程管道通信缺点,Linux进程通信(IPC)的方式详解
前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...
- linux 进程和线程或线程和线程之间通过管道通信(pipe)
linux 进程和线程或线程和线程之间通过管道通信(pipe) 转自:http://blog.csdn.net/robertkun/article/details/8095331 线程间通信: [cp ...
- 【流媒体服务器Mediasoup】 NodeJs与C++信令通信详解及Linux下管道通信的详解(五)
目录 前言 匿名管道进程间通信 进程间管道 的创建与图解 MediaSoup中的管道创建 MediaSoup Channel的创建 NodeJs和 C++ 管道通信的过程 MediaSoup 消息确认 ...
- Linux系统无名管道通信实验,Linux进程间通信(二)---管道通信之无名管道及其基础实验...
管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子).Linux的管道主要包括两种:无名管道和有名管道.这一节主要讲 ...
最新文章
- python 命令-Django 基本命令
- 高通平台modem部分mbn文件的OTA和PDC升级方法
- linux命令we,Linux学习篇之基础命令
- Spark Streaming
- matlab实验函数编写与程序设计,matlab实验四函数编写与程序设计
- Bootstrap 固定导航条
- Kafka eagle 安装
- 敏捷图书排行 (2011年修订)【转】
- JUnit5 测试套件示例
- mysql怎么换行_MySql的主从复制、主主复制
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_9 typeAliases标签和package标签
- 顺德苹果售后维修体验
- Python图像处理【5】图像扭曲与逆扭曲详解
- 高颜值挂脖式运动蓝牙耳机盘点,五款3D环绕高音质蓝牙耳机测评分享
- 利用Java模拟石头剪刀布游戏
- WebSocket——SpringBoot+Vue3+TS+SockJS+STOMP简单连接使用
- 高帧频CMOS相机研发方案
- 深度剖析UglifyJS
- 学会BLDC电机控制必须搞懂的状态
- 如何安装 Magisk