匿名管道的操作

只能在具有亲缘关系的进进程之间进行通信。
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---管道通信的使用相关推荐

  1. linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...

    操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...

  2. linux管道通信 半双工通信

    本文转载自:http://blog.sina.com.cn/s/blog_5ed3e6210100d87d.html 在windows里进程间的通信主要用到是的消息,而在Linux里管道通信是一个不错 ...

  3. Linux管道通信【操作系统】利用pipe

    实验内容: 编写一程序,建立一个管道.同时,父进程生成子进程 p1,p2,这两个子进程分别向管道中写入各自的字符串,父进程读出它们. 实验相关的系统调用: (1)pipe的创建 pipe(fd)< ...

  4. linux下进程间管道通信,Linux下进程间通信方式-管道

    本文关键字: linux 管道通信,linux 进程通信方式,无名管道,有名管道 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入.Linux的管道主要包括两种:无 ...

  5. Linux进程通信之管道

    进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件.管道.信号.共享内存.消息队列.套接字.命名管道等.但现在常用的进程间通信方式有: 管道 – 使用最简单 pipe 管道一般读写行为 F ...

  6. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  7. linux进程管道通信缺点,Linux进程通信(IPC)的方式详解

    前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...

  8. linux 进程和线程或线程和线程之间通过管道通信(pipe)

    linux 进程和线程或线程和线程之间通过管道通信(pipe) 转自:http://blog.csdn.net/robertkun/article/details/8095331 线程间通信: [cp ...

  9. 【流媒体服务器Mediasoup】 NodeJs与C++信令通信详解及Linux下管道通信的详解(五)

    目录 前言 匿名管道进程间通信 进程间管道 的创建与图解 MediaSoup中的管道创建 MediaSoup Channel的创建 NodeJs和 C++ 管道通信的过程 MediaSoup 消息确认 ...

  10. Linux系统无名管道通信实验,Linux进程间通信(二)---管道通信之无名管道及其基础实验...

    管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子).Linux的管道主要包括两种:无名管道和有名管道.这一节主要讲 ...

最新文章

  1. python 命令-Django 基本命令
  2. 高通平台modem部分mbn文件的OTA和PDC升级方法
  3. linux命令we,Linux学习篇之基础命令
  4. Spark Streaming
  5. matlab实验函数编写与程序设计,matlab实验四函数编写与程序设计
  6. Bootstrap 固定导航条
  7. Kafka eagle 安装
  8. 敏捷图书排行 (2011年修订)【转】
  9. JUnit5 测试套件示例
  10. mysql怎么换行_MySql的主从复制、主主复制
  11. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_9 typeAliases标签和package标签
  12. 顺德苹果售后维修体验
  13. Python图像处理【5】图像扭曲与逆扭曲详解
  14. 高颜值挂脖式运动蓝牙耳机盘点,五款3D环绕高音质蓝牙耳机测评分享
  15. 利用Java模拟石头剪刀布游戏
  16. WebSocket——SpringBoot+Vue3+TS+SockJS+STOMP简单连接使用
  17. 高帧频CMOS相机研发方案
  18. 深度剖析UglifyJS
  19. 学会BLDC电机控制必须搞懂的状态
  20. 如何安装 Magisk

热门文章

  1. 《重构》-重新组织函数
  2. 9.20PMP每日一题
  3. 深入理解Auto Layout 第一弹
  4. Spring Boot 配置随机数技巧
  5. Windows 10通过本地镜像离线安装.NET 3.5
  6. 【UE4+Vive】学习笔记1
  7. php图片处理之本地图片转base64格式上传
  8. Apache Shiro SessionManager配置详解.
  9. 哟西,CLOUDSTACK第一步,搞定
  10. UIView Animation效果