Linux学习笔记-匿名和命名管道读写的相同点及不同点
目录
理论
例子
理论
匿名和命名管道读写的相同性
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学习笔记-匿名和命名管道读写的相同点及不同点相关推荐
- Linux学习笔记-无名管道,有名管道,消息队列
Linux学习笔记-无名管道,命名管道,消息队列 无名管道 特点 创建无名管道的函数 demo 命名管道 特点 创建命名管道的函数 demo 消息队列 特点 创建消息队列涉及到的函数 demo 无名管 ...
- linux给数据库重命名,Linux学习笔记:mv移动或文件重命名
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 语法:mv 源文件 目标文件 视mv命令中 ...
- Linux学习笔记4
Linux学习笔记4 Linux学习笔记4 绝对路径与相对路径 查看当前目录 查看家目录 进入家目录 当前目录和上一级目录 创建目录 删除目录 创建一个文件 打印文字 重定向和追加重定向 删除文件 给 ...
- linux学习笔记(6)磁盘管理
linux学习笔记(6)磁盘管理 文章目录 6.1磁盘命名 6.2分区方式 6.3磁盘管理 6.3.1基本分区 6.3.2逻辑卷LVM 6.3.3交换分区管理Swa ...
- Linux学习笔记(包含虚拟机及Linux系统安装)
Linux学习笔记 1.1 Linux简介 1.2 Linux 的版本 1.3 Linux的应用 2.Linux的安装 2.1 虚拟机安装 2.1.1 什么是虚拟机? 2.1.2 VMware介绍 2 ...
- Linux 学习笔记2 常用命令
Linux 学习笔记1 安装linux详细教程_O丶ne丨柒夜的博客-CSDN博客 Linux_目录结构 基本介绍 1.liux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录&quo ...
- *Linux学习笔记
*Linux学习笔记__20161222usst湛恩 所有的荣誉和赞美都献给上帝,让一切成为可能! 1. 文件系统 Linux下所有设备都是文件,采用树形文件管理系统,将文件存储在单个目录结构中(虚拟 ...
- Linux学习笔记:
Linux学习笔记: 概述:一套免费使用和自由传播的类Unix操作系统,是一个多用户,多任务,支持多线程和多cpu的操作系统. 发行版:Ubuntu,ReadHat,CentOs,Debain,Fed ...
- 迅为嵌入式Linux学习笔记5——进程间通信
迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...
最新文章
- 从技术角度探讨:深度传感器行业有哪些发展机会
- json - 使用 json-lib
- 纯CSS实现文字一行居中,多行左对齐的方法
- 计算机联锁站按钮继电器电路,计算机联锁系统与站内各种电路结合说明.DOC
- 设置更改root密码 连接mysql mysql常用命令
- Ubuntu16.04下CUDA 9.0 + cuDNN v7.0 + tensorflow 1.6.0(GPU)环境搭建
- centos将某一目录权限给用户_CentOS账号和权限的管理,指定用户目录权限
- java api 开发_Java开发人员应该知道的前20个库和API
- github推荐好玩项目
- bootstrap 点击图片放大查看_Bootstrap 开源 SVG 图标库 Bootstrap Icons
- 下个乳业蓝海风口 竟很可能是低温鲜奶?
- springboot下maven分环境打包
- php mysql简单分页代码_用php制作简单分页(从数据库读取记录)的方法详解
- 剑指offer刷题总结
- Android 打开系统蓝牙设置
- java 线程耗尽_关于线程耗尽导致请求超时系统假死
- 北京第一年-OpenGL-19-沉淀
- 全国计算机二级上机模拟考试,全国计算机二级上机模拟考试习题集(01-50)解答..doc...
- docker基础手册
- java swing 大球吃小球游戏 功能完善 完整代码 下载即可以运行