目录

理论

例子


理论

在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)相关推荐

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

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

  2. linux进程间通信:命名管道FIFO

    文章目录 FIFO 通信特点 系统调用接口 应用 拥有亲缘关系之间的进程通信 非亲缘关系进程之间的通信 总结 FIFO 通信特点 FIFO文件有文件名 可以像普通文件一样存储在文件系统之中 可以像普通 ...

  3. 【Linux】进程间通信-命名管道FIFO

    命名管道概述 如果我们要在不相关的进程间交换数据,那么使用FIFO文件将会十分方便. FIFO文件通常也称为命名管道(named pipe).命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式 ...

  4. Linux学习笔记(管道)

    管道学习 一.什么是管道 1.tee管道 例1:tee输出内容的数量为多个 例2:tee输出的文件数量为两个 2.特殊的管道 xargs 一.什么是管道 管道命令可以将多条命令组合起来,一次性完成复制 ...

  5. Linux学习笔记-使用管道通信实现cat /etc/passwd | grep root这条命令

    子进程1: 执行命令将执行结果写入管道 子进程2: 从管道中读取命令执行的结果,然后根据关键字过滤 如 cat /etc/passwd | grep root这条命令 注意以下几点: 1.指针数组构建 ...

  6. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)

    整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

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

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

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

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

  9. *Linux学习笔记

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

最新文章

  1. java8新特性_Java8新特性之Date API|乐字节
  2. 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
  3. 自定义PopupWindow
  4. java简单自定义Annotation
  5. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)
  6. oracle数据库部署策略,Oracle数据库部署实施流程
  7. 让你的 Linux 远离黑客(二):另外三个建议
  8. ERP初学者入门自学笔记
  9. 基础线性代数知识点总结与回顾(二):秩与线性相关
  10. 天池比赛实践——阿里云安全恶意程序检测(基于机器学习算法XGBoost)
  11. 《孤独的根号三》 中英文对照
  12. SQL小挑战——第3期(电影院选择连续座位)
  13. Web scraper使用教程-基本用法
  14. Redis的maven依赖
  15. 梯度反向传播(CS231n课程笔记翻译)
  16. 操作系统真象还原实验记录之实验六:内存分页
  17. 一个自学前端的4年工作总结【三十而立,拒绝躺平】
  18. Nature :读博之前应该知道的二十件事情
  19. 腾讯QQ2006自带Addrplus恶意插件之完全清除方法
  20. 某高校毕业设计-数据分析课题技术实现篇

热门文章

  1. Apache Nutch 1.3 学习笔记目录
  2. 试析C#编程语言的特点及功能
  3. 北方华创:「8大报表应用场景」助力全方位数字化管理
  4. 从72小时到1分钟,数据如何快速响应业务需求?
  5. 七点讲透分布式架构的前世今生,面试官都不知道的概念来了
  6. 虚拟光驱的开发者斟酌了很久
  7. 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
  8. 一次使用duplicate创建测试数据库的过程
  9. 刘翔博客答即时通信公司网友提问
  10. 经典面试题(34):以下代码将输出的结果是什么?