Linux学习笔记-命名管道(FIFO)
目录
理论
例子
理论
在int mkfifo(const char *pathname, mode_t mode)
成功返回o,出错返回-1
他包含在头文件:
#include <sys/types.h>
#include <sys/stat.h>
这里要注意:
1.只要对FIFO有适当的访问权限,FIFO可用在任何两个没有任何关系的进程之间通信;
2.本质是内核中的一块缓存,另在文件系统中以一个特殊的设备文件(管道文件)存在;
3.在文件系统中只有一个索引块存放文件的路径,没有数据块,所有数据存放在内核中;
4.命名管道必须在读和写中同时打开,否则单独读或者单独写会发生阻塞;
5.命令mkfifo创建命名管道(命令内部调用mkfifo函数)
6.对FIFO的操作与操作普通文件一样;
例子
程序运行截图如下:
fifo_read.c
#include <stdio.h>
#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);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);
}
fifo_write.c源码如下:
#include <unistd.h>
#include <memory.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>int main(int argc, char *argv[]){if(argc < 2){printf("usage:%s fifo\n", argv[0]);exit(1);}printf("open fifo write ... \n");//打开命名管道int fd = open(argv[1], O_WRONLY);if(fd < 0){perror("open error");exit(1);}else{printf("open fifo success:%d\n", fd);}char *s = "12345678901234";size_t size = strlen(s);if(write(fd, s, size) != size){perror("write error");}close(fd);exit(0);
}
这里要创建一个pip,命令如下:mkfifo s.pipo
Linux学习笔记-命名管道(FIFO)相关推荐
- Linux学习笔记-无名管道,有名管道,消息队列
Linux学习笔记-无名管道,命名管道,消息队列 无名管道 特点 创建无名管道的函数 demo 命名管道 特点 创建命名管道的函数 demo 消息队列 特点 创建消息队列涉及到的函数 demo 无名管 ...
- linux进程间通信:命名管道FIFO
文章目录 FIFO 通信特点 系统调用接口 应用 拥有亲缘关系之间的进程通信 非亲缘关系进程之间的通信 总结 FIFO 通信特点 FIFO文件有文件名 可以像普通文件一样存储在文件系统之中 可以像普通 ...
- 【Linux】进程间通信-命名管道FIFO
命名管道概述 如果我们要在不相关的进程间交换数据,那么使用FIFO文件将会十分方便. FIFO文件通常也称为命名管道(named pipe).命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式 ...
- Linux学习笔记(管道)
管道学习 一.什么是管道 1.tee管道 例1:tee输出内容的数量为多个 例2:tee输出的文件数量为两个 2.特殊的管道 xargs 一.什么是管道 管道命令可以将多条命令组合起来,一次性完成复制 ...
- Linux学习笔记-使用管道通信实现cat /etc/passwd | grep root这条命令
子进程1: 执行命令将执行结果写入管道 子进程2: 从管道中读取命令执行的结果,然后根据关键字过滤 如 cat /etc/passwd | grep root这条命令 注意以下几点: 1.指针数组构建 ...
- Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...
- linux给数据库重命名,Linux学习笔记:mv移动或文件重命名
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 语法:mv 源文件 目标文件 视mv命令中 ...
- Linux 学习笔记2 常用命令
Linux 学习笔记1 安装linux详细教程_O丶ne丨柒夜的博客-CSDN博客 Linux_目录结构 基本介绍 1.liux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录&quo ...
- *Linux学习笔记
*Linux学习笔记__20161222usst湛恩 所有的荣誉和赞美都献给上帝,让一切成为可能! 1. 文件系统 Linux下所有设备都是文件,采用树形文件管理系统,将文件存储在单个目录结构中(虚拟 ...
最新文章
- java8新特性_Java8新特性之Date API|乐字节
- 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
- 自定义PopupWindow
- java简单自定义Annotation
- matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)
- oracle数据库部署策略,Oracle数据库部署实施流程
- 让你的 Linux 远离黑客(二):另外三个建议
- ERP初学者入门自学笔记
- 基础线性代数知识点总结与回顾(二):秩与线性相关
- 天池比赛实践——阿里云安全恶意程序检测(基于机器学习算法XGBoost)
- 《孤独的根号三》 中英文对照
- SQL小挑战——第3期(电影院选择连续座位)
- Web scraper使用教程-基本用法
- Redis的maven依赖
- 梯度反向传播(CS231n课程笔记翻译)
- 操作系统真象还原实验记录之实验六:内存分页
- 一个自学前端的4年工作总结【三十而立,拒绝躺平】
- Nature :读博之前应该知道的二十件事情
- 腾讯QQ2006自带Addrplus恶意插件之完全清除方法
- 某高校毕业设计-数据分析课题技术实现篇