linux无名管道】的更多相关文章

Linux下无名管道一般仅用于父子进程间的通信: 测试代码如下 //file name: fifo_test.c #include <sys/prctl.h> #include "fifo_test.h" int main(int argc, char **argv) { int ret = 0; char buf[32] = {'\0'}; int pipe_fd[2]; //0---read 1--write pid_t pid; if(pipe(pipe_fd)<…
特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程.兄弟进程.子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 通过man 2 pipe查看 #include <unistd.h> int pipe(int pipefd[2]); 打开两个文件描述符,保存在pipefd中,其中pipefd[0]为读端,pipefd[1]为写端 无名管道写入操作不具有原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数…
无名管道是linux中管道通信的一种原始方法,有以下特征: 1.单工通信模式,具有固定的读端和写端: 2.管道可以看成是一种特殊的文件,对于它的读写可以使用普通的read(),write()等文件IO操作函数接口,但是它不属于任何文件系统,并且只存在与内存中: 3.只能用于具有亲缘关系的进程之间的通信: 4.通常使用时,首先创建一个管道,然后调用fork函数创建一个子进程,该子进程会继承父进程所创建的管道: 5.只有在管道的读端存在时,向管道写入数据才有意义,否则向管道写入的数据的进程将收到内核…
管道 只能用于具有亲缘关系的进程之间通信是一个半双工的通信模式, 具有固定的写读端和写端,管道可以看成一种特殊的文件,对它可以使用普通的read.write等操作 管道的创建: #include <unistd.h> int pipe(int fd[2]) 该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由pipe()创建管道后,一般再fork一个子进程, 然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共…
一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2…
无名管道 无名管道是半双工的,就是对于一个管道来讲,只能读,或者写. 无名管道只能在相关的,有共同祖先的进程间使用(即一般用户父子进程). 一个fork或者execve调用创建的子进程继承了父进程的文件描述符. 打开和关闭管道 ]); 在你从一个管道中读出或者写入数据,这个管道必须存在. 如果成功建立了管道,则会打开两个文件描述符,并把他们的值保存在一个整数数组中. 第一个文件描述符用于读取数据,第二个文件描述符用于写入数据.管道的两个文件描述符相当于管道的两端,一端只负责读数据,一端只负责写数…
1.查看命令: man 2 pipe 2.头文件:#include <unistd.h> 3.函数原型: int pipe(int pipefd[2]); a.pipefd[2] :无名管道的两个文件描述符,int型的数组,大小为2,pipefd[0]为读端,pipefd[1]为写端 4.返回值: 成功:返回0 失败:返回-1 5.函数特点:无名管道是最简单的常用于一对一的亲缘进程间通信的方式,既然说是管道,所以可以想象成一条水管,连接两个进程一个进程负责输入数据,另一个进程负责接收数据,反过…
无名管道: 1)只能用于具有亲缘关系的进程之间的通信(无名管道是某一个进程创建的,不像普通文件有路径,在文件系统中是不可见的,其他进程要想打开,只能通过继承的方式去打开) 2)半双工的通信模式,具有固定的读端和写端 3)管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read.write函数. 4)管道是基于文件描述符的通信方式.当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1].其中fd[0]固定用于读管道,而fd[1]固定用于写管道. 注意事项: 1)当管道中无数据时…
一.进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication).如下图所示. 二.管道是一种最基本的IPC机制,由pipe函数创建: #include <unistd.h> int pipe(int filedes[2]); 调用pipe…
命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信,因此,通过 FIFO 不相关的进程也能交换数据. 命名管道(FIFO)和无名管道(pipe)有一些特点是相同的,不一样的地方在于: 1.FIFO 在文件系统中作为一个特殊的文件而存在,但 FIFO 中的内容却存放在内存中. 2.当使用 FIFO 的进程退出后,FIFO 文件将…