有名管道
1、查看命令:man 3 mkfifo

2、头文件:#include <sys/types.h>
#include <sys/stat.h>

3、函数原型:int mkfifo(const char *pathname, mode_t mode);
a、*pathname:有名管道的名字 例如:/home/gec/myfifo
b、 mode:八进制的权限, 例如:0777

4、返回值:
成功:0
失败-1

5、函数特点:
有名管道存在于文件系统中,提供写入原子性特征,共享内存效率高

6、有名管道的特征:
a、有名字,储存于普通文件系统中
b、任何具有相应权限的进程都可以使用open()来获取FIFO的文件描述符
c、跟普通文件一样,用read()和writ()来读和写
d、不能用lseek来定位
e、具有写入原子性,支持多写者同时进行写操作而数据不会相互践踏

)读取数据的代码:fifo_read.c
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<string.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h> #define FIFO "/home/gec/FIFO" /*有名管道的名字*/
#define LENGTH 50 /*字符数组的长度*/
int main(int argc,char **argv)
{
int ret,fd; /*ret用来接收mkfifo返回的值,fd用来存放打开有名管道的文件描述符*/
char buf[LENGTH]; if(access(FIFO,F_OK))/*判断是否已经创建了有名管道,如果已经创建,则返回0否则返回非0的数*/
{
ret = mkfifo(FIFO,); /*创建有名管道,成功返回0,失败返回-1*/
if(ret == -) /*创建有名管道失败*/
{
perror("mkfifo");
exit();
}
} fd = open(FIFO,O_RDONLY); /*已读方式打开有名管道,不能同时以读写权限打开,成功返回文件
描述符,失败返回-1*/
if(fd == -) /*打开失败*/
{
perror("open");
exit();
}
puts("从有名管道中读取到的数据:");
while()
{
memset(buf,,sizeof(buf)); /*清空缓冲区*/ read(fd,buf,sizeof(buf)); /*阻塞读取有名管道中的数据到buf中*/ printf("%s",buf); if(strncmp(buf,"q",) == ) /*buf中的数据和q比较,如果相等,则返回0*/
{
break;
}
} close(fd); /*关闭有名管道*/
return ;
}
()写入数据的代码:fifo_write.c
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<string.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h> #define FIFO "/home/gec/FIFO" /*有名管道的名字*/
#define LENGTH 50 /*字符数组的长度*/
int main(int argc,char **argv)
{
int ret,fd; /*ret用来接收mkfifo返回的值,fd用来存放打开有名管道的文件描述符*/
char buf[LENGTH]; if(access(FIFO,F_OK))/*判断是否已经创建了有名管道,如果已经创建,则返回0 否则返回非0的数*/
{
ret = mkfifo(FIFO,); /*创建有名管道,成功返回0,失败返回-1*/
if(ret == -) /*创建有名管道失败*/
{
perror("mkfifo");
exit();
}
} fd = open(FIFO,O_WRONLY); /*以写方式打开有名管道,不能同时以读写权限打开,成功返回文件
描述符,失败返回-1*/
if(fd == -) /*打开失败*/
{
perror("open");
exit();
} puts("请输入数据到有名管道中,输入q退出:");
while()
{
memset(buf,,sizeof(buf)); /*清空缓冲区*/ fgets(buf,sizeof(buf),stdin); /*从终端输入数据到buf中*/
write(fd,buf,strlen(buf)); /*阻塞把数据写入有名管道*/ if(strncmp(buf,"q",) == ) /*buf中的数据和q比较,如果相等,则返回0*/
{
printf("aaaa\n");
break;
}
} close(fd); /*关闭有名管道*/
return ;
}

linux之有名管道的更多相关文章

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

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

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

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

  3. linux下有名管道进程通信

    一.任务 1.学习mkfifo等函数: 2.了解有名管道的特点.阻塞打开与非阻塞打开等: 3.编写一个关于有名管道进程通信的程序,并运行. 二.相关概念 1.相关函数 创建有名管道的函数是mkfifo ...

  4. Linux 进程间通信 有名管道(fifo)

    有名管道特点: 1)无名管道只能用于具有亲缘关系的进程之间,这就限制了无名管道的使用范围 2)有名管道可以使互不相关的两个进程互相通信. 3)有名管道可以通过路径名来指出,并且在文件系统中可见,但内容 ...

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

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

  6. Linux 进程通信(有名管道)

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

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

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

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

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

  9. linux 有名管道(FIFO)

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

随机推荐

  1. Java基础语法<八> 继承

    1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...

  2. 对sppnet网络的理解

    前言: 接着上一篇文章提到的RCNN网络物体检测,这个网络成功的引入了CNN卷积网络来进行特征提取,但是存在一个问题,就是对需要进行特征提取图片大小有严格的限制.当时面对这种问题,rg大神采用的是对分 ...

  3. PHP----SAPI

    SAPI:Server Application Programming Interface 服务器端应用编程端口.它就是PHP与其它应用交互的接口,PHP脚本要执行有很多种方式,通过Web服务器,或者 ...

  4. 为什么不需要为Python对象添加 getter 和 setter

    Getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和setter函数以供外部使用. 这样做的好处是属性的具体实现被隐藏, ...

  5. 简单谈谈js中的MVC

    MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据).视图.控制器(分发器). 本文将用一个经典的例子todoList来展开(代码在最后). 一个事件发生的过程(通信单向流动): ...

  6. (转)HTTP协议漫谈

    HTTP协议漫谈   简介 园子里已经有不少介绍HTTP的的好文章.对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将HTTP协议的元素进行分类讲 ...

  7. Css元素居中设置

    你对DIV CSS居中的方法是否了解,这里和大家分享一下,用CSS让元素居中显示并不是件很简单的事情,让我们先来看一下CSS中常见的几种让元素水平居中显示的方法. DIV CSS居中 用CSS让元素居 ...

  8. vue使用中的随笔

    在vue中vue-router配置的路径默认有"#"号,虽然无伤大雅,但是很多客户都不想看到,所以在初始配置路由的时候加上下面一句代码就可以了 mode:'history', 路径 ...

  9. 5.spark弹性分布式数据集

    弹性分布式数据集 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分布式数据集 ...

  10. 初学Python(七)——控制语句

    初学Python(七)——控制语句 初学Python,主要整理一些学习到的知识点,这次是控制语句. if : #-*- coding:utf-8 -*- age=raw_input('input yo ...