linux c语言之pipe()函数
来源:互联网 发布:windows player手机版 编辑:程序博客网 时间:2024/05/19 00:39
函数简介
函数原型 int pipe(int fd[2])
函数传入值 fd[2]:管道的两个文件描述符,之后就是可以直接操作者两个文件描述符
返回值 成功 0 失败 -1
管道简介
管道是Linux 支持的最初Unix IPC形式之一,具有以下特点:
管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系 统,并且只存在与内存中。 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
创建int pipe(int fd[2])
该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由 pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指 的是具有共同的祖先,都可以采用管道方式来进行通信)。
管道读写
管道两端可 分别用描述字fd[0]以及fd[1]来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd[0]表示,称其为管道读端;另 一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O 函数都可以用于管道,如close、read、write等等。
规则1:写端对读端存在的依赖性
向管道中写入数据:
向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试 图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么写操作将一直阻塞。
注:只有在管道的读端存在时,向管道中写入数据才有意义。否则,向管道中写入数据的进程将收到 内核传来的SIFPIPE信号,应用程序可以处理该信号,也可以忽略(默认动作则是应用程序终止)。
- linux c语言之pipe()函数
- pipe 函数 (C语言)
- pipe 函数 (C语言)
- linux下c编程之无名管道pipe()函数
- linux编程之pipe()函数
- linux编程之pipe()函数
- linux编程之pipe()函数
- Linux C pipe函数 man 翻译
- 管道-pipe函数-fdopen函数-popen函数详解-C语言
- linux c之pipe的使用例子
- linux pipe 函数( int pipe(int filedes[2]))
- linux进程通信之pipe (pipe,pipe2)
- linux下的pipe()管道函数
- Linux pipe函数
- Linux pipe函数
- Linux pipe函数
- Linux pipe 函数
- Linux pipe函数
- 大菲波数(递推 + JAVA大数)
- Unity3D计时器四种写法
- iOS代理不回调的多种原因
- hdu 1269
- android活动的启动模式
- linux c语言之pipe()函数
- Struts2拦截器
- git命令大全--常用命令
- 检测到目标URL存在http host头攻击漏洞
- 【算法学习】一行核心代码实现阶乘函数和Fibonacci数列
- Leetcode之Non-decreasing Array 问题
- CentOS7 升级到7.4
- Reversing Linked List
- appium在android7.0真机上测试程序时报错command failed shell “ps ‘uiautomator’”的解决方式