管道/FIFO注意事项】的更多相关文章

管道 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端. 3. 规定数据从管道的写端流入管道,从读端流出. 管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现. 管道的局限性: 数据一旦被读走,便不在管道中存在,不可反复读取. 缓冲区是有限 由于管道采用半双工通信方式.因此,数据只能在一个方向上流动. 只能在有公共祖先的进程间使用管道. 所传送的是无格式字节流 关闭未使用的管道文件描述符不仅仅是为了确保进程不会耗尽其文件描述符…
1 命名管道(FIFO) 管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信.后来从管道为基础提出命名管道(named pipe,FIFO)的概念,该限制得到了克服.FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中.这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据.值得注意的是,FIFO严格遵循…
进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   http://blog.csdn.net/younger_china/article/details/15961557  进程间通信系列 之 共享内存简单实例   http://blog.csdn.net/younger_china/article/details/15991081  进程间通信系列…
整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信: 实现机制: 管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条.管道的一端连接一个进程的输出.这个进程会向管道中放入信息.管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息.一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管…
命名管道(FIFO) 基本概念 命名管道和一般的管道基本相同,但也有一些显著的不同: 命名管道是在文件系统中作为一个特殊的设备文件而存在的. 不同祖先的进程之间可以通过管道共享数据. 当共享管道的进程执行完所有的I/O操作以后,命名管道将继续保存在文件系统中以便以后使用. 管道只能由相关进程使用,它们共同的祖先进程创建了管道.但是,通过FIFO,不相关的进程也能交换数据. 命名管道创建和操作:: #include #include int mkfifo(const char *pathname,…
首先我得检讨一下自己,这几天有些颓呀,打不起精神,板子出了点问题,果真自学还是很困难呀,硬件方面难解决呀,理想与现实还是很有差距的,伤透了,凌乱了. 一直在理解进程间通信的问题.发现上次忽略了一个问题,就是命名管道,命名管道和一般的管道有一些显著的不同: 1.FIFO是在文件系统中作为一个特殊的设备文件而存在的: 2.不同祖先的进程之间可以通过管道共享数据: 3.当共享管道的进程执行完所有的I/O操作后,FIFO将继续保存在文件系统中以便以后使用. 这里需要注意一下:管道只能由相关的进程使用,它…
管道: #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<wait.h> /*管道没有名字,只能用于有亲缘关系的进程间通信*/ typedef struct stu { int id; ]; }Stu; int main() { ]; int ret=pipe(pfd);//创建管道(管道只能在父进程中创建) ) perror(&…
命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信,因此,通过 FIFO 不相关的进程也能交换数据. 命名管道(FIFO)和无名管道(pipe)有一些特点是相同的,不一样的地方在于: 1.FIFO 在文件系统中作为一个特殊的文件而存在,但 FIFO 中的内容却存放在内存中. 2.当使用 FIFO 的进程退出后,FIFO 文件将…
FIFO又被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而这两个相关的进程还要有一个共同创建了它们的祖先进程,但是FIFO,不相关的进程之间也能交换数据. FIFO是一种文件类型.通过stat结构的st_mode成员的编码可以知道文件是否是FIFO类型,在linux下查看自己创建的FIFO文件: 创建FIFO类似于创建文件,也存在于文件系统之中.定义如下: #include <sys/stat.h> int mkfifo(const char* path, mode_t mode)…
管道和FIFO的特征之一是它们的数据是一个字节流.这是UNIX的原生I/O模型.进程往其中写入的是字节流,系统不对它作解释. FIFO不存数据,只是通过它找到内核文件. 一.建立有名管道 1.命令mknod   : mknod  name  p/s/m    //创建管道文件/信号量/共享内存 2.命令mkfifo 创建管道 mkfifo -m 664 k2     //创建一个访问权限为664的管道文件k2 3作为函数:mkfifo #include <sys/types.h> #inclu…