进程间通信----管道
来源:互联网 发布:mac下载不了软件 编辑:程序博客网 时间:2024/06/15 01:39
进程间通信,又称为IPC,包含以下类型
半双工管道FIFO
全双工管道
消息队列
信号
信号量
共享内存
套接字socket
streams。。
一,管道是UNIX系统IPC的最古老形式,他具有两种局限性
1、数据只能在一个方向上流动
2、只能在具有公共祖先的进程之间使用。一个管道由一个进程创建,然后该进程调用fork,
此后父、子进程之间就可应用该管道。
管道叫pipe,而有名管道叫FIFO。
pipe,无名管道只能父子进程间通信
有名管道FIFO能在系统中的任意两个进程间通信
管道的创建方式:
#include <unistd.h>
int pipe(int filedes[2]);
filedes 文件描述符
filedes[0]用于读管道, filedes[1]用于写管道.
关闭管道只需要关闭两个文件描述符即可,可以使用close函数。
父子进程通信
创建管道钱先调用pipe,否则子进程不会继承文件描述符。
另外要注意的是, 调用fork之后做什么取决于我们的数据流的方向, 对于父进程到子进程
的管道, 父进程关闭管道的读端 fd[0], 子进程关闭管道的写端fd[1]。
当读一个写端已经被关闭的管道时, 所有数据被读取之后, read函数调用后将返回0,。
当写一个读端已经被关闭的管道, 则会产生信号SIGPIPE, write返回-1, errno设置为EPIPE
在写管道的时候, 管道缓冲区的大小由 PIPE_BUF决定。用pathconf活则会fpathconf函数可以确定PIPE_BUF的值
二、创建有命名管道
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode)
pathname : FIFO文件名
mode : 创建属性
- 进程间管道通信
- 进程间通信: 管道
- 进程间通信--管道
- 进程间通信----管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信----管道
- 进程间通信----管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信-管道
- 进程间管道通信
- 进程间管道通信
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信-管道
- codevs 1001 舒适的路线(并查集+贪心)
- 变量的存放位置
- 1613-3-傅溥衍 总结《2016年10月2日》【连续第二天总结】
- 多态类型
- 图片的压缩工具类
- 进程间通信----管道
- 互联网带来了什么
- 【OpenJ_Bailian 4120】 + dp
- 归并排序(升序)
- [leetcode] 371. Sum of Two Integers 解题报告
- sublime-shortcuts
- 字符串之循环右移
- 强制修改常量值
- 简易计算机