第4章 管道与FIFO】的更多相关文章

4.1 管道 管道是由pipe函数创建的,提供一个单向数据流. 头文件 #include <unistd.h> 函数原型 int pipe(int fd[2]); 返回值 成功则为0,出错则为-1 函数功能 该函数返回两个文件描述符:fd[0]和fd[1].fd[0]用来读操作,fd[1]用来写操作 说明 管道只能用于有亲缘关系进程间通讯.要实现非亲缘关系进程间通讯用有名管道FIFO 4.2 管道实现半双工通讯 实现的步骤: (1)创建管道(fd[0]和fd[1]) (2)fork (3)父进…
4.1 概述 管道只在亲缘进程间使用,FIFO在任意进程间使用 4.2 管道 #include <unistd.h> ]) fd[0]用来读管道,fd[1]用来写管道 1)命令who | sort | lp中的管道: 2)管道实现文件服务器与客户端: #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <string.h> #include <stdlib.h…
4.1:概述 管道是最初的Unix IPC形式,可追溯到1973年的Unix第三版.尽管对于许多操作来说很有用,但它们的根本局限在于没有名字,从而只能由亲缘关系的进程使用.这一点随FIFO的加入得改正. 本章讲述管道和FIFO的创建与使用.我们使用一个简单的文件服务器例子,同时查看一些客户-服务器程序设计问题:IPC通道需要量.迭代服务器与并发服务器.字节流与消息接口. 4.2:一个简单的客户-服务器例子 下图所示的客户-服务器例子在本章和第六章中都要用,我们用它来分析说明管道.FIFO和Sys…
管道和FIFO   管道(pipe)       管道在Unix及Linux进程间通信是最基础的,很容易理解.管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动.管道是典型的单向通信,即计算机网络中所说的“半双工”.管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在父子进程之间通信.通常是父进程创建一个管道,然后fork一个子进程,此后父子进程共享这个管道进行通信. 管道由pipe函数创建,函数原型如下:       #include<unis…
有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的其中一个,可以创建命名管道. #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *filename, mode_t mode); int mknod(const char *filename, mode…
命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样.即使与 FIFO 的创建进程不存在亲缘关系的进程,仅仅要可以訪问该路径.就行彼此通过 FIFO 相互通信,因此,通过 FIFO 不相关的进程也能交换数据. 命名管道(FIFO)和无名管道(pipe…
管道和FIFO作为最初的UNIX IPC形式,现在已用得较少.SocketPair可作为全双工版本的管道,较为常用,这里简单做个笔记 管道 * 只用于有亲缘关系的进程间通信 * 单向,即半双工 (双向方法:1 使用2个管道 2 使用SocketPair) * pipe() => write()/read() FIFO (有名管道) * 可用于无亲缘关系的进程间通信 * 单向 * mkfifo() => open() => write()/read() SocketPair * 套接字(一…
http://blog.csdn.net/firefoxbug/article/details/8137762 linux 有名管道(FIFO) 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小) 管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令.或记录)等等 多个写进程,一个读进程.可以参考我之前的博客http://blog.csdn.net/firefoxbug/article/details/…
系统加于管道和FIFO的唯一限制为: OPEN_MAX     一个进程在任意时刻打开的最大描述符数: PIPE_BUF       可原子的写往一个管道或FIFO的最大数据量. OPEN_MAX的值可通过调用sysconf函数查询.它通过可通过执行ulimit命令(Bourne shell或Korn Shell)或limit命令(C shell)从shell中修改.它也可以通过调用setrlimit函数从一个进程中修改. PIPE_BUF的值通常定义在<limits.h>头文件中,但是Pos…
一个描述符能以两种方式设置成非阻塞. (1)调用open时可以指定O_NONBLOCK标志. writefd = open(FIFO1,O_WRONLY | O_NONBLOCK,0); (2)如果一个描述符已经打开,那么可以调用fcntl以启用O_NONBLOCK标志.对于管道来说,必须使用这种技术,因为管道没有open调用,在pipe调用中也无法指定O_NONBLOCK标志.使用fcntl时,我们先使用F_GETFL命令取得当前状态标志,将它与O_NONBLOCK标志按位或后,再使用F_SE…