管道

  提供一个单路(单向)数据流,可以为两个不同进程提供进程间的通信手段

#include <unistd.h>

    int pipe(int fd[]);

  返回两个文件描述符,fd[0](读) 和 fd[1](写)

  管道间的通信通常是使用 read 和 write 函数完成的

  管道的典型用法:

    首先,由父进程创建一个管道,然后调用fork派生一个自身的副本

    接着,父进程关闭管道的读端,子进程关闭管道的写段

    这样就在父子进程间提供了一个单向数据流

 

  双管道:

    当需要一个双向数据流的时候,我们必须创建两个管道,每个方向一个

int    pipe1[], pipe2[];
pid_t childpid; Pipe(pipe1);
Pipe(pipe2); if( (childpid = Fork()) == )
{
Close(pipe1[]);
Close(pipe2[]); /*代码*/ exit();
} Close(pipe1[]);
Close(pipe2[]); /*代码*/ Waitpid(childpid, NULL, );
exit();

FIFO

  指代先进先出(first in, first out),是一个单向数据流

  不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一个FIFO,因而也称"有名管道"。(我更愿意把它看做一个文件)

#include <sys/types.h>
#include <sys/stat.h> int mkfifo(const char* pathname, mode_t mode);

  pathname是一个路径名,也是该FIFO的名字

  mode指文件的权限位

常值 说明

S_IRUSR

S_IWUSR

用户(属主)读

用户(属主)写

S_IRGRP

S_IWGRP

(属)组成员读

(属)组成员写

S_IROTH

S_IWOTH

其他成员读

其他成员写

    常值 FIFO_MODE 在 unpipc.h 中定义:

#define FIFE_MODE ( S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH )

  与管道不同的是:

    创建并打开一个管道只需用 pipe,创建并打开一个FIFO则需要调用 mkfifo 后再调用 open

    管道在所有进程都关闭它后自动消失,FIFO的名字则只有通过调用 unlink 才从文件系统中删除

#define FIFO1 "/tmp/fifo.1"
#define FIFO2 "/tmp/fifo.2" int readfd, writefd;
pid_t childpid; if( (mkfifo(FIFO1, FILE_MODE) < ) && (errno != EEXIST) )
err_sys("can't create %s", FIFO1);
if( (mkfifo(FIFO2, FILE_MODE) < ) && (errno != EEXIST) )
{
unlink(FIFO1);
err_sys("can't create %s", FIFO2);
} if( (childpid = Fork()) == )
{
readfd = Open(FIFO1, O_RDONLY, );
writefd = Open(FIFO2, O_WRONLY, ); /*代码*/
//为什么这里不需要Close(readfd) Close(writefd)   exit();
} writefd = Open(FIFO1, O_WRONLY, );
readfd = Open(FIFO2, O_RDONLY, ); /*代码*/ Waitpid(childpid, NULL, ); Close(readfd);
Close(writefd); Unlink(FIFO1);
Unlink(FIFO2);
exit();

【读书笔记】管道和FIFO的更多相关文章

  1. 单字节的FIFO缓存(30天自制操作系统--读书笔记)

    从今天起,写一些读书笔记.最近几个月都在看<30天自制操作系统这本书>,书虽说看的是电子书,但可以花钱买的正版书,既然花费了金钱,就总得有些收获. 任何人都不能总是固步自封,想要进步就得学 ...

  2. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  3. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  4. [转] IPC之管道、FIFO、socketpair

    管道和FIFO作为最初的UNIX IPC形式,现在已用得较少.SocketPair可作为全双工版本的管道,较为常用,这里简单做个笔记 管道 * 只用于有亲缘关系的进程间通信 * 单向,即半双工 (双向 ...

  5. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  6. Linux 之父自传《just for fun》读书笔记

    一次偶然的机会,看到了阮一峰老师关于这本书的介绍,当时我就觉得这本书相当有趣. 在没有读这本书之前,我觉得 linus 作为发明 Linux 系统的人,应该是一个比较严肃的人,就像我的老师一样.但事实 ...

  7. 《Windows核心编程》读书笔记 上

    [C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...

  8. Linux内核分析第四章 读书笔记

    Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...

  9. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  10. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

随机推荐

  1. input text 不可编辑的解决办法

    <div class="inp bg"> <input id="inp-query" type="text" name=& ...

  2. mind nerverr later(转)

    每个人都有感到失落迷惘的时候.人生用专制又霸道的方式运行着,每当我们心想一切尘埃落定.生活稳固的时候,生活总爱给我们惊喜,粉碎我们短暂的安逸,让我们不得不重新思考—_— “我走对路了吗?” “我能够赚 ...

  3. bzoj2002

    这道题学习了一种简洁的解决一些数据结构题的方法——分块法这道题方法很多,但分块写起来只有1kb左右,非常的简洁(但不是非常的高效)首先很容易思考到一种暴力的做法,从后往前推,很容易搞出每个点会弹几次弹 ...

  4. makefile 自动处理头文件的依赖关系 (zz)

    现在我们的Makefile写成这样: all: main main: main.o stack.o maze.ogcc $^ -o $@ main.o: main.h stack.h maze.hst ...

  5. 【索引】Objective-C基础教程-读书笔记

    第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章  面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...

  6. JavaScript 模块化加载

    存在AMD(Asynchronous Module Definition异步模块定义)规范和CMD(Common Module Definition通用模块定义)规范.对于依赖的模块,AMD是提前执行 ...

  7. Sicily1020-大数求余算法及优化

    Github最终优化代码: https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1020.c 题目如下: 1020. ...

  8. 月見(つきみ) 夕(ゆう) SumiHui.墨虺

    造影早迎中秋,自己通过word设计的

  9. Linux下安装MySQL5.6

    传送门:http://www.jianshu.com/p/f4a98a905011 字数802 阅读164 评论0 喜欢4 环境:1.操作系统:CentOS release 6.8 (Final)2. ...

  10. c#基础语言编程-Path和Directory

    引言 在程序常会对文件操作,在对文件操作中需要对文件路径的进行定位,在.Net中针对寻找文件提供两个静态类以供调用,Path和Directory. Path类 来自命名空间SYstem.IO,Path ...