第14课-有名管道通讯编程

14.1 核心理论--有名管道

有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用open,read,write等。

FIFO文件在使用上和普通文件又相似之处,但是也有不同之处:

1. 读取FIFO文件的进程只能以“RDONLY”方式打开fifo文件。

2. 写FIFO文件的进程只能以“WRONLY”方式打开fifo文件。

3. FIFO文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还是存在的。

注:在vim命令里面,在底部打入:set nu可以显示行数。

14.2 函数学习

1. 创建有名管道

(1) 函数名

mkfifo

(2) 函数原形

int mkfifo(const char *pathname, mode_t mode);

(3) 函数功能

创建FIFO文件(有名管道)。

(4) 所属头文件

#include<sys/types.h>

#include<sys/stat.h>

(5) 返回值

成功:0

失败:-1

(6) 参数说明

pathname:我们创建的fifo文件的名字(包含路径)。

mode:fifo文件的访问权限

2. 删除有名管道

(1) 函数名

unlink

(4) 函数原形

int unlink(const char *pathname);

(5) 函数功能

删除FIFO文件(有名管道)以及普通文件。

(4) 所属头文件

#include<unistd.h>

(5) 返回值

成功:0

失败:-1

(6) 参数说明

pathname:我们要删除的文件的名字(包含路径)。

14.3 综合实例编程

任意两个进程利用有名管道通讯。

创建写进程程序:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdio.h>

void main()

{

int fd;

/*1.创建fifo文件*/

mkfifo("/tmp/myfifo",0666);

/*2.打开fifo文件*/

fd = open("/tmp/myfifo",O_WRONLY);

/*3.写入数据fifo文件*/

write(fd,"hello fifo",11);

/*4.关闭fifo*/

close(fd);

}

创建读进程程序:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdio.h>

void main()

{

int fd;

char c_buf[15];

/*1.打开fifo文件*/

fd = open("/tmp/myfifo",O_RDONLY);

/*2.读fifo文件数据*/

read(fd,c_buf,11);

printf("read is %s\n",c_buf);

close(fd);

unlink("/tmp/myfifo");

}

运行结果:当运行./fifo_write时,程序会处于阻塞状态。直达我们在另一个窗口运行./fifo_read时,阻塞状态才会解除,并且打印:read is hello fifo

转载于:https://www.cnblogs.com/free-1122/p/11346198.html

第三季-第14课-有名管道通讯编程相关推荐

  1. 13.无名管道通讯编程

    13.无名管道通讯编程 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信. 2.进程通信的目的: 1.数据传输:一个进程需要将数据发送给另一个进 ...

  2. linux有名管道数据异常,Linux系统编程—有名管道

    ▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方式. 1.1 管道本质 管道的本质也是一种文件,不过是伪文件,实际上是一块内核缓冲区, ...

  3. 【Linux系统编程学习】匿名管道pipe与有名管道fifo

    此为牛客Linux C++和黑马Linux系统编程课程笔记. 0. 关于进程通信 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到 ...

  4. linux进程通信1:进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战

    进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战 1.进程间通信概述: 举例1: 你手机微信和别人手机微信通信 举例2: 如:父子进程wait 和 exit之间的通信 进程间通信(IPC ...

  5. linux进程间通讯-有名管道

    文章目录 阻塞和非阻塞概念 通过fcntl函数设置文件的阻塞特性 文件描述符概述 文件描述符的复制 有名管道 有名管道的创建 有名管道的基本读写操作 有名管道实现进程间通信 有名管道的读写规律(阻塞) ...

  6. 【Linux系统编程】进程间通信--有名管道

    命名管道的概述 无名管道,由于没有名字,只能用于亲缘关系的进程间通信(更多详情,请看<无名管道>).为了克服这个缺点,提出了命名管道(FIFO),也叫有名管道.FIFO 文件. 命名管道( ...

  7. Linux系统编程:fifo有名管道的使用

    fifo介绍 我们可以利用管道进行进程间通信,已经有匿名管道 为啥还要fifo 有名管道呢?有名管道是对匿名管道的一个补充,匿名管道是用在有血缘关系的进程间通信.fifo有名管道呢,可以用在任何进程间 ...

  8. 【编撰】linux IPC 002 - 匿名管道PIPE和有名管道FIFO的概念和实例,以及应用比较

    前言:上一节提到IPC的概述,本一节,原文作者比较详细的讨论了,管道的概念和实例和使用场景: 原文作者:郑彦兴 (mlinux@163.com)国防科大计算机学院 http://www.ibm.com ...

  9. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  10. linux系统调用创建无名管道,linux 无名管道pipe和有名管道FIFO

    1.管道(pipe) 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种 ...

最新文章

  1. Windows上安装MinGW(GCC),各个Package的作用
  2. Spring事务的处理流程、传播属性、及部分释疑
  3. WebService的两种方式SOAP和REST比较
  4. 第44讲:scrapy中间键Middleware的使用
  5. 【Docker】Asp.net core在docker容器中的端口问题
  6. python文本分词_【Python】使用jieba对文本进行分词
  7. python图像处理:一福变五福
  8. 中班音乐 机器人教案_【李小娜老师优秀教案分享】中班音乐活动小树叶教案及反思...
  9. 【Kafka】Kafka生产者producer相关参数详解batch.size linger.ms 等参数
  10. java 大型互联网架构_分享一些大型互联网架构常用的高端技术
  11. java启动mysq服务_启动和关闭MySQL服务
  12. HCIE-Security Day5:防火墙会话表和转发原理
  13. Python实现批量处理扫描特定目录
  14. Maven—Eclipse设置Maven项目JDK版本
  15. AI专利申请5年激增1.8倍
  16. JAVA调用海康威视SDK
  17. 从0开始的技术美术之路(十)伽马校正
  18. 《云计算技术与应用基础》课程标准
  19. 微信小程序-001-抽签功能-000-目录概要
  20. BestSync多终端文件资料同步利器

热门文章

  1. python中datetime模块是以什么时间为基础_python基础-time和datetime模块
  2. Git安装配置与GitHub注册及简单使用
  3. office 论文 页码_还在花钱找人排版?这份最全攻略,让你论文一次过!
  4. SurfaceView浅析
  5. xpath的基础知识
  6. buck变换器设计matlab_电力电子变换器控制设计(1)
  7. 电信公网ip和内网ip的区别_私有IP共有IP和弹性IP的区别
  8. Java在W10_java——基础 在w10环境下如何配置java环境
  9. golang语言示例:--->下载网站的json文件,同时对文件进行分析输出
  10. python-gui-pyqt5的使用方法-6--lambda传递参数的方法: