Linux进程间通信

Linux进程间通信

1.什么是IPC
interprocess communication
进程间通信
2.进程间通信的四种方式
a.管道-------简单
b.信号-------系统开销小
c.共享映射区
d.套接字

3.管道(匿名)
本质:内核的缓冲区—伪文件(不占用磁盘空间)
特点:
两部分
读端 ---------- 写端------对应两个文件描述符
数据写端流入,读端流出
原理:队列
环形队列
FIFO
4.创建匿名管道
int pipe(int fd[2])

实现一个父子进程间的通信,结合了一下所学知识
execlp() ----更换子进程的代码块
fork()----------生出子进程
wait()----------回收进程中的子进程
dup2-----------实现标准输入输出重定向
pipe()----------创建一个管道

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
	int fd[2];
	int ret=pipe(fd);
	pid_t pid=fork();
	if(pid>0) {
	//输出重定向,父进程执行   ps  aux操作
	int STDOUT_FILEON;
	dup2(fd[1],STDOUT_FILEON);
	//关闭读操作
	close(fd[0]);
	execlp("ps","ps","aux",NULL);
	}
	else if(pid==0) {
		//输入重定向
		int STDIN_FILEON;
		dup2(fd[0],STDIN_FILEON);
		//关闭写操作
		close(fd[1]);
		execlp("grep","grep","weihang","--color=auto",NULL);
	}
	return 0;
}

5.管道的读行为
有数据的情况下:正常读取,返回读出的字节数
无数据的情况下:写端全部关闭,read解除阻塞,返回0.
6.管道的写行为
①读端全部关闭
管道破裂,进程被终止
②读端没有全部关闭
往缓冲区写

有名管道fifo(first in first out)

1.特点
有名管道
伪文件,在磁盘大小永远为0
在内核有一个对应的缓冲区
2.使用场景
没有血缘关系的进程间通信
3.创建方式
命令:mkfifo + 管道名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值