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

int mknod(const char *pathname, mode_t mode, dev_t dev);

管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信。

在有名管道(named pipe或FIFO)提出来之后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径与之关联,

以FIFO的文件形式存储于文件系统中。有名管道是一个设备文件。因此,即使进程与创建FIFO的进程不存在亲缘关系,

只要可以访问该路径,就能够通过FIFO相互通信。值得注意的是,FIFO(first in first out)总是按照先进先出的原则工作,

第一个被写入的数据将首先从管道中读出。

有名管道的创建与读写

LINUX下有两种方式创建有名管道。一是在Shell下交互地建立一个有名管道,二是在程序中使用系统函数建立有名管道。

shell方式下可使用mknod或mkfifo命令,下面命令使用mknod创建一个有名管道:

mknod namedpipe

----------------------------------------------------------------

创建有名管道的函数有两个:mknod和mkfifo

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

int mknod(const char *pathname, mode_t mode, dev_t dev);

函数mknod参数中path为创建的有名管道的全路径名;mod为创建的有名管道的模式,指明其存取权限;dev为设备值,该值取决于文件创建的种类,

它只在创建设备文件时才会用到。

umask(0);

if (mknod("/tmp/fifo", S_IFIFO|0666, 0) == -1)

{

perror("mknod error!");

exit(1);

}

umask(0);

if (mkfifo("/tmp/fifo", S_IFIFO|0666) == -1)

{

perror("mkfifo error!");

exit(1);

}

S_IFIFO|0666 指明创建一个有名管道且存取权限为0666,即创建者、与创建者同组的用户、其他用户对该有名管道的  访问权限 都是 可读可写。

有名管道创建后就可以使用了,有名管道和管道的使用方法基本是相同的。只是使用有名管道时,必须先调用open将其打开。因为有名管道

是一个存在于硬盘上的文件,而管道是存在于内存中的特殊文件。

需要注意的是,调用open打开有名管道的进程可能会被阻塞。但如果同时用读写方式(O_RDWR)打开,则一定不会导致阻塞;如果以只读方式

(O_RDONLY)打开,则调用open函数的进程将会被阻塞直到有写方式打开管道;同样以写方式(O_WRONLY)打开也会阻塞直到有读方式打开管道。

实例:

写端:

#include

#include

#include

#include

#include

#include

#include

#include

#define FIFO_NAME "testfifo"

int main(int argc, char* argv[])

{

int fd;

char buf[] = "yyyyyyy";

mkfifo(FIFO_NAME, S_IFIFO|);

fd = open(FIFO_NAME, O_WRONLY);

write(fd, buf, strlen(buf)+);

close(fd);

unlink(FIFO_NAME);//删除管道文件

sleep(1);

return ;

}

读端:

#include

#include

#include

#include

#include

#include

#include

#include

#define FIFO_NAME "testfifo"

#define BUF_SIZE 1024

int main(int argc, char* argv[])

{

int fd;

char buf[BUF_SIZE];

fd = open(FIFO_NAME, O_RDONLY);

read(fd, buf, BUF_SIZE);

printf("%s\n", buf);

close(fd);

return ;

}

Linux 进程通信(有名管道)

有名管道(FIFO) 有名管道是持久稳定的. 它们存在于文件系统中. FIFO比无名管道作用更大,因为他们能让无关联的进程之间交换数据. 管道文件一般用于交换数据. shell命令创建管道 一个she ...

Unix/Linux进程间通信(二):匿名管道、有名管道 pipe()、mkfifo()

1. 管道概述及相关API应用 1.1 管道相关的关键概念 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管 ...

linux进程间通信-有名管道(FIFO)

有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的 ...

Linux进程间通信IPC学习笔记之有名管道

基础知识: 有名管道,FIFO先进先出,它是一个单向(半双工)的数据流,不同于管道的是:是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)有一个与路径名关联的名 ...

linux进程间通信--有名管道

有名管道 只有当一个库函数失败时,errno才会被设置.当函数成功运行时,errno的值不会被修改.这意味着我们不能通过测试errno的值来判断是否有错误存在.反之,只有当被调用的函数提示有错误发生时 ...

Linux系统编程(11)——进程间通信之有名管道

管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服.FIFO不同于管道之处在于它提供一个路径名与之关联,以 ...

linux 有名管道(FIFO)

http://blog.csdn.net/firefoxbug/article/details/8137762 linux 有名管道(FIFO) 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时 ...

linux之有名管道

有名管道1.查看命令:man 3 mkfifo 2.头文件:#include #include 3.函数原型:int mk ...

Linux网络编程学习(七) ----- 有名管道(第四章)

1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...

随机推荐

机器人聊天的小Demo

先来张图,看看我们要做成什么样的效果.很简单的一个发送消息接收消息的界面,那怎么实现的呢,毫无疑问,是ListView的多布局了,右边显示我们发送消息的条目,左边显示要接收消息的条目.下面是一个Edi ...

red5研究(一):下载,工程建立、oflaDemo安装、demo测试

一.red5下载.添加工程到myeclipse 1,从官网上下载red51.01版本(我下载的是red51.0的版本),下载链接http://www.red5.org/downloads/red5/1 ...

SGU 113.Nearly prime numbers

水一个代码: #include using namespace std; int n, a; bool ok; bool prime (int x) { ; i * ...

调不尽的内存泄漏,用不完的Valgrind

调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-X.X.X.tar.bz2 2. 解压安装包:tar –jxvf ...

win10怎么安装JDK8,配置JDK8的环境变量

win10怎么安装JDK8,配置JDK8的环境变量 本文详细说明怎么在win10上安装JDK8,方便小伙伴们快速学会安装与配置JDK. 工具/原料 windows10 jdk-8u51-windows ...

TensorFlow实现回归

数据:fetch_california_housing(加利福尼亚的房价数据) 1.解析解法 import tensorflow as tf import numpy as np from sklea ...

python实现以application/json格式为请求体的http post请求

接口传递数据格式类型为json格式,如下图抓包查看 Python实现脚本请求接口并以中文打印接口返回的数据 import json import requests url = "https: ...

nginx for Windows Known issues:path

http://nginx.org/en/docs/windows.html nginx/Windows uses the directory where it has been run as the ...

linux有名管道 mkfifo,有名管道mkfifo相关推荐

  1. Linux 3.进程间通信(IPC)(pipe 无名管道、mkfifo 有名管道、ftok、msgget、msgrcv、msgsnd、msgctl 消息队列)

    Linux 3.进程间通信(IPC) 进程间通信: 进程间方式: pipe 管道(无名管道) 头文件及原型 特点 pipe 示例 FIFO(有名管道) 管道文件的创建 mkfifo 头文件及原型 mk ...

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

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

  3. linux 进程间通信及makefile 无名管道/有名管道/共享内存/信号/消息队列

    http://www.voidcn.com/article/p-hxvuiypm-mr.html https://www.cnblogs.com/wuyida/archive/2013/02/03/6 ...

  4. linux无名管道和有名管道

    1)无名管道:管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道:只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程). 单独构成一种独立的文件系统:管道对于管道两端的进程而 ...

  5. 【Linux】管道文件(有名管道、无名管道)

    [Linux]管道文件(有名管道.无名管道) 多进程编程的目的就是为了同时完成多个任务. 例如:一个产品,一个软件,需要n个进程同时执行才能完成,而这些进程之间一定是有所联系的. 因此:多进程工作时, ...

  6. linux进程通信中有名管道的特点,linux进程通信之(四):有名管道的读与写

    前面我们说了无名管道,下面我们来说说有名管道,请看下面一段代码: fifo_write.c: #include#include#include#include#include#include#incl ...

  7. 【嵌入式总复习】Linux管道详解——管道通信、无名管道、有名管道、具体应用示例

    目录 管道 1. 管道通信 1.1 通信模式 1.2 管道通信中特殊的名词 2. 无名管道(PIPE) 2.1 无名管道的通信原理 2.2 无名管道特点 2.3 如何操作无名管道 示例1 示例2 3. ...

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

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

  9. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道

    Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...

最新文章

  1. 数据库设计和管理规范
  2. 纪念乔布斯,推出四期iPad、iphone赠书活动【第一期】
  3. markdown to html
  4. tf.Session().as_default的作用
  5. UVA - 208 Firetruck(并查集+dfs)
  6. java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...
  7. pr cpu100%_PR插件Beauty Box安装教程
  8. 服务器控制口协议,服务器管理ipmi接口协议的扩展方法 Extension Methods server management interface protocol ipmi...
  9. 三星手机android,个人评测 篇三:三星S10e还值得买吗——半年使用杂谈,最终篇...
  10. NetSetMan v3.4.1
  11. JsBarcode的使用
  12. 007-redis-trib.rb命令详解
  13. 解决Ubuntu远程连接mysql连不上的问题
  14. 23Bootstrap
  15. Android 自定义键盘 随机键盘
  16. 程序员通过google 赶快来赚美金~ hot
  17. python切片步长为负数_Python切片知识解析
  18. linux ps被替换文件,在linux下从jar中替换、修改文件
  19. Win32编程基础知识(包括对程序的分析)
  20. 回溯法输出自然数1~n的全排列。

热门文章

  1. 我的世界服务器poi文件夹,我的世界公益服务器Poiの粘液生存[1.12.2-1.15.1]
  2. BGP实验,MPLS多协议标签交换防路由黑洞
  3. css3动画效果(旋转,帧动画)
  4. CSS3 3D旋转动画
  5. [share] About Pull Ups
  6. 教Alexa看懂手语,不说话也能控制语音助手
  7. 空间滤波(平滑滤波)
  8. 2022年度C语言面试题库汇编(含完整答案)
  9. 车载多媒体音频协议转换器
  10. Nacos 1.4.1 紧急升级修复Alibaba Nacos 认证绕过漏洞