Linux进程间通信

    xiaoxiao2022-07-06  202

    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 + 管道名

    最新回复(0)