当前位置: 首页 > news >正文

【Linux】进程间通信

本节重点:
1.进程间通信介绍
2.管道
3.消息队列
4.共享内存
5.信号量

1.进程间通信

1.1 进程间通信目的

1.数据传输:一个进程需要将它的数据发送给另一个进程
2.资源共享:多个进程之间共享同样的资源
3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

1.2 进程间通信发展

1.管道
2.System V进程间通信
3.POSIX进程间通信

1.3 进程间通信分类

1.3.1 管道

1.匿名管道pipe
2.命名管道

1.3.2 System V IPC

1.System V 消息队列
2.System V 共享队列
3.System V 信号量

1.3.3 POSIX IPC

1.消息队列
2.共享内存
3.信号量
4.互斥量
5.条件变量
6.读写锁

2.管道

2.1 什么是管道

1.管道是Unix中最古老的进程间通信的形式。
2.我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”
在这里插入图片描述

2.2 匿名管道

#include <unistd.h>
功能:创建一无名管道
原型
int pipe(int fd[2]);
参数
fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:成功返回0,失败返回错误代码

在这里插入图片描述
示例代码:

例子:从键盘读取数据,写入管道,读取管道,写到屏幕
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>int main( void )
{int fds[2];char buf[100];int len;if ( pipe(fds) == -1 )perror("make pipe"),exit(1);// read from stdinwhile ( fgets(buf, 100, stdin) ) {len = strlen(buf);// write into pipeif ( write(fds[1], buf, len) != len ) {perror("write to pipe");break;}memset(buf, 0x00, sizeof(buf));// read from pipeif ( (len=read(fds[0], buf, 100)) == -1 ) {perror("read from pipe");break;}// write to stdoutif ( write(1, buf, len) != len ) {perror("write to stdout");break;}}
}

http://www.mrgr.cn/news/61998.html

相关文章:

  • 实时数据处理:技术支持和优势
  • 搜维尔科技:机械手遥操作触觉震动力反馈虚拟现实数据手套
  • 计算机网络-常用网络命令和工具
  • 鸿蒙生态崛起:开发者机遇与挑战并存
  • 「C/C++」C++ 设计模式 之 单例模式(Singleton)
  • EasyExcel自定义下拉注解的三种实现方式
  • iOS18 取消/适配TabbarController缩放动画
  • Vue CLI: 安装、项目创建及基本概念指南,vue生命周期
  • C++:输入和输出
  • 《Linux系统编程篇》exec族函数——基础篇
  • MATLAB——入门知识
  • Vue3 学习笔记(十三)Vue组件详解
  • Windows高级技巧:轻松实现多进程窗口的连接与管理
  • 轻松实现金蝶与旺店通数据无缝对接的完整解决方案
  • Linux文件系统_inode
  • 兽音译器的编码原理
  • 真香!Python十大文件操作整理,收藏起来以后有用!!
  • 为什么不建议使用黑帽SEO手法?
  • 阿里云VPC机器如何访问公网
  • 【总目录】
  • 浏览器指纹:了解这个神秘的技术
  • node学习记录-process
  • 【flink】之kafka到kafka
  • Flask
  • Python 中 jieba 模块详解
  • Frida使用