目录

理论

例子


理论

匿名和命名管道读写的相同性

1.默认都是阻塞性读写;

2.都适用于socket的网络通信;

3.阻塞不完整管道(有一段关闭)

a.单纯读时,在所有数据被读取后,read返回0,以表示到达了文件尾部。

b..单纯写时,则产生信号SIGPIPE,如果忽略该信号或捕捉该信号并从处理程序返回,则write返回-1,同时errno设置为EPIPE。

4.阻塞完整管道(两端都开启)

a.单纯读时,要么阻塞,要么读取到数据。

b.单纯写时,写到管道满时会出错。

5.非阻塞不完整管道(有一端关闭)

a.单纯读时直接报错;

b.单纯写时,则产生信号SIGPIPE,如果忽略该信号或捕捉该信号并从处理程序返回,则write返回-1,则同时errno设置为EPIPE。

6.非阻塞完整管道(两端都开启)

a.单纯读时直接报错;

b.单纯写时,写到管道时会出错;

不同点

1.打开方式不一致;

2.pipe通过fcntl系统设置O_NOBLOCK来设置非阻塞性读写;

3.FIFO通过fcntl系统调用或者open函数来设置非阻塞;

例子

FIFO通过fcntl系统调用或者open函数来设置非阻塞性读写

如下的源码:

fifo_read.c

#include <stdlib.h>
#include <fcntl.h>
#include <memory.h>int main(int argc, char *argv[]){if(argc < 2){printf("usage:%s fifo\n", argv[0]);exit(1);}printf("open fifo read... \n");//int fd = open(argv[1], O_RDONLY);int fd = open(argv[1], O_RDONLY | O_NONBLOCK);if(fd < 0){perror("open error");exit(1);}else{printf("open file success:%d\n", fd);}//从命名管道中读取数据char buf[512];memset(buf, 0, sizeof(buf));while(read(fd, buf, sizeof(buf)) < 0){perror("read error");}printf("%s\n", buf);close(fd);exit(0);
}

运行截图如下:

Linux学习笔记-匿名和命名管道读写的相同点及不同点相关推荐

  1. Linux学习笔记-无名管道,有名管道,消息队列

    Linux学习笔记-无名管道,命名管道,消息队列 无名管道 特点 创建无名管道的函数 demo 命名管道 特点 创建命名管道的函数 demo 消息队列 特点 创建消息队列涉及到的函数 demo 无名管 ...

  2. linux给数据库重命名,Linux学习笔记:mv移动或文件重命名

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 语法:mv 源文件 目标文件 视mv命令中 ...

  3. Linux学习笔记4

    Linux学习笔记4 Linux学习笔记4 绝对路径与相对路径 查看当前目录 查看家目录 进入家目录 当前目录和上一级目录 创建目录 删除目录 创建一个文件 打印文字 重定向和追加重定向 删除文件 给 ...

  4. linux学习笔记(6)磁盘管理

    linux学习笔记(6)磁盘管理 文章目录   6.1磁盘命名   6.2分区方式   6.3磁盘管理     6.3.1基本分区     6.3.2逻辑卷LVM     6.3.3交换分区管理Swa ...

  5. Linux学习笔记(包含虚拟机及Linux系统安装)

    Linux学习笔记 1.1 Linux简介 1.2 Linux 的版本 1.3 Linux的应用 2.Linux的安装 2.1 虚拟机安装 2.1.1 什么是虚拟机? 2.1.2 VMware介绍 2 ...

  6. Linux 学习笔记2 常用命令

    Linux 学习笔记1 安装linux详细教程_O丶ne丨柒夜的博客-CSDN博客 Linux_目录结构 基本介绍 1.liux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录&quo ...

  7. *Linux学习笔记

    *Linux学习笔记__20161222usst湛恩 所有的荣誉和赞美都献给上帝,让一切成为可能! 1. 文件系统 Linux下所有设备都是文件,采用树形文件管理系统,将文件存储在单个目录结构中(虚拟 ...

  8. Linux学习笔记:

    Linux学习笔记: 概述:一套免费使用和自由传播的类Unix操作系统,是一个多用户,多任务,支持多线程和多cpu的操作系统. 发行版:Ubuntu,ReadHat,CentOs,Debain,Fed ...

  9. 迅为嵌入式Linux学习笔记5——进程间通信

    迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...

最新文章

  1. 从技术角度探讨:深度传感器行业有哪些发展机会
  2. json - 使用 json-lib
  3. 纯CSS实现文字一行居中,多行左对齐的方法
  4. 计算机联锁站按钮继电器电路,计算机联锁系统与站内各种电路结合说明.DOC
  5. 设置更改root密码 连接mysql mysql常用命令
  6. Ubuntu16.04下CUDA 9.0 + cuDNN v7.0 + tensorflow 1.6.0(GPU)环境搭建
  7. centos将某一目录权限给用户_CentOS账号和权限的管理,指定用户目录权限
  8. java api 开发_Java开发人员应该知道的前20个库和API
  9. github推荐好玩项目
  10. bootstrap 点击图片放大查看_Bootstrap 开源 SVG 图标库 Bootstrap Icons
  11. 下个乳业蓝海风口 竟很可能是低温鲜奶?
  12. springboot下maven分环境打包
  13. php mysql简单分页代码_用php制作简单分页(从数据库读取记录)的方法详解
  14. 剑指offer刷题总结
  15. Android 打开系统蓝牙设置
  16. java 线程耗尽_关于线程耗尽导致请求超时系统假死
  17. 北京第一年-OpenGL-19-沉淀
  18. 全国计算机二级上机模拟考试,全国计算机二级上机模拟考试习题集(01-50)解答..doc...
  19. docker基础手册
  20. java swing 大球吃小球游戏 功能完善 完整代码 下载即可以运行

热门文章

  1. 玩转HTML5应用实战:灵活拖拉文件
  2. 第一次给知名项目贡献代码,有点紧张
  3. 自动推荐图表、智能分析,这个分析工具有点酷!
  4. 什么样的程序算作漂亮的?
  5. 飞鸽传书:谈谈RenderControl手动调用
  6. 刻奇·缩减·博客——当今中国博客文化之批判
  7. 浅谈javascript数值类型转换
  8. suse 查看java版本_SLES 11 中JDK的安装和配置
  9. mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣
  10. M1芯片版mac软件安装出现异常怎么办?解决方法来了