环境编程代码实例:进程间通信(IPC)

这篇具有很好参考价值的文章主要介绍了环境编程代码实例:进程间通信(IPC)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

环境编程代码实例:进程间通信(IPC)。文章来源地址https://www.toymoban.com/news/detail-446738.html


代码仓库

  • yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)
  • Environment-and-network-programming-examples: 环境和网络编程实例 (gitee.com)

内容

低级:3种

  • 全局变量/glov:类似管道、命名管道、消息队列、共享内存:头文件/库文件全局变量,源文件全局变量
  • 文件/file:类似管道、命名管道、消息队列、共享内存
  • PV操作/pv:类似信号量

第三方:2种

  • 数据库/db:类似管道、命名管道、消息队列、共享内存
  • 缓存/cache:类似管道、命名管道、消息队列、共享内存

一般:7种

  • 管道/无名管道/pipe
  • 命名管道/有名管道/FIFO
  • 信号/signal
  • 信号量/semaphore:XSI信号量,POSIX信号量
  • 消息队列/mq
  • 共享内存/shm
  • 套接字/socket

高级:1种

  • 内存映射/mmap:类似共享内存

全局变量

头文件全局变量

缺点:

  • 只读,不可写
  • 同步互斥问题:无法解决。需要引入其他进程间通信机制才能解决
  • 扩展问题:无法解决。需要引入其他进程间通信机制才能解决

相关语句:

  • extern
  • #include

源文件全局变量

缺点:

  • 只读,不可写
  • 只能用于具有公共祖先的进程间
  • 同步互斥问题:无法解决。需要引入其他进程间通信机制才能解决
  • 扩展问题:无法解决。需要引入其他进程间通信机制才能解决

文件

缺点:

  • 性能问题:访问文件效率低
  • 同步互斥问题:无法解决。需要引入其他进程间通信机制才能解决
  • 扩展问题:无法解决。需要引入其他进程间通信机制才能解决

相关函数:

  • open()
  • fopen()

PV操作

缺点:

  • 同步互斥问题:无法解决。需要引入其他进程间通信机制才能解决
  • 扩展问题:无法解决。需要引入其他进程间通信机制才能解决

数据库

优点:

  • 相对于文件,由相关机制优化同步互斥、性能和扩展问题。

相关数据库:

  • MySQL
  • SQL Server

缓存

优点:

  • 相对于文件,由相关机制优化同步互斥、性能和扩展问题。

相关缓存:

  • Memcached
  • Redis

管道

缺点:

  • 半双工
  • 只能用于具有公共祖先的进程间

相关函数:

  • pipe():创建管道
  • popen():打开管道
  • pclose():关闭管道

命名管道

相关函数:

  • mkfifo():创建命名管道
  • mkfifoat():创建命名管道

信号

相关函数:

  • signal()
  • kill()

信号量

XSI信号量

缺点:

  • 在系统范围内起作用,没有引用计数。不能隐式删除,需要显式删除
  • 在文件系统中没有名字。不能使用文件相关函数操作,需要使用特定的系统调用或命令
  • 不使用文件描述符。不能使用多路复用函数操作,一般一次只使用一个而不是多个(消息队列)

相关函数:

  • semget():获取信号量
  • semctl():控制信号量
  • semop():操作信号量

POSIX信号量

相关函数:

  • sem_open():打开有名信号量
  • sem_close():关闭信号量
  • sem_unlink():销毁有名信号量
  • sem_trywait():尝试等待信号量
  • sem_wait():等待信号量
  • sem_timewait():定时等待信号量
  • sem_post():提交信号量
  • sem_init():初始化无名信号量
  • sem_destroy():销毁无名信号量
  • sem_getvalue():获取信号量值

消息队列/mq

缺点:

  • 在系统范围内起作用,没有引用计数。不能隐式删除,需要显式删除
  • 在文件系统中没有名字。不能使用文件相关函数操作,需要使用特定的系统调用或命令
  • 不使用文件描述符。不能使用多路复用函数操作,一般一次只使用一个而不是多个(消息队列)

相关函数:

  • ftok():创建键
  • msgget():获取消息队列
  • msgctl():控制消息队列
  • msgsnd():发送消息到消息队列
  • msgrcv():接收消息从消息队列

共享内存/shm

缺点:

  • 在系统范围内起作用,没有引用计数。不能隐式删除,需要显式删除
  • 在文件系统中没有名字。不能使用文件相关函数操作,需要使用特定的系统调用或命令
  • 不使用文件描述符。不能使用多路复用函数操作,一般一次只使用一个而不是多个(消息队列)

相关函数:

  • shmget():获取共享内存
  • shmctl():控制共享内存
  • shmat():连接共享内存
  • shmdt():分离共享内存

套接字/sock

优点:

  • 可用于不同主机进程间的通信

相关函数:

  • socket()
  • bind()

内存映射

相关函数:

  • mmap()
  • munmap()

代码

说明

  • 由于代码篇幅较多,在博客中直接粘贴并呈现会显得冗长,因此未在博客中放置代码。请前往"代码仓库"查看或获取相关代码
  • 对大部分总结的进程间通信机制提供简单实现
  • 有详细步骤解析
  • 只简单演示基础的操作,未考虑深层次的问题
  • 对相关函数获取返回值进行错误处理,不相关函数不进行错误处理

目录结构

  • 头文件全局变量:glov_h
  • 源文件全局变量:glov_s
  • 文件,PV操作:file_pv
  • 管道:pipe
  • 命名管道:fifo
  • 信号:sig
  • XSI信号量:sem_XSI
  • POSIX信号量:sem_POSIX
  • 消息队列:mq
  • 共享内存:shm
  • 套接字:socket(使用代码仓库中,“传输控制协议(TCP)简单版:TCP_simple”)
  • 内存映射:mmap

持续更新

  • 当前内容总结于博主和《UNIX环境高级编程(第3版)》的一部分
  • 在《UNIX网络编程(第3版)卷2:进程间通信》中,还有其他的进程间通信机制,在后面有时间阅读后,持续更新代码仓库和博客

总结

环境编程代码实例:进程间通信(IPC)。


参考资料

  • 《UNIX环境高级编程(第3版)》作者:W.Richard Stevens,Stephen A.Rago
  • 《UNIX网络编程(第3版)》作者:W.Richard Stevens,Bill Fenner,Andrew M.Rudoff

作者的话

  • 感谢参考资料的作者/博主
  • 作者:夜悊
  • 版权所有,转载请注明出处,谢谢~
  • 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
  • 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
  • 文章在认识上有错误的地方, 敬请批评指正
  • 望读者们都能有所收获

到了这里,关于环境编程代码实例:进程间通信(IPC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【看表情包学Linux】IPC 进程间通信 | PIPE 管道 | 匿名管道 | 管道通信的原理 | 系统调用: pipe 接口

       🤣  爆笑 教程  👉 《看表情包学Linux》 🔥 CSDN 累计订阅量破千的火爆 C/C++ 教程的 2023 重制版,C 语言入门到实践的精品级趣味教程。 了解更多: 👉  \\\"不太正经\\\" 的专栏介绍  ← 试读第一章 订阅链接: 🔗 《C语言趣味教程》 ← 猛戳订阅! 目录 Ⅰ. 进程间通信(I

    2024年02月14日
    浏览(37)
  • electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

    electron项目常常由一个主进程和多个渲染进程构成,渲染进程之间是隔离的,而所有渲染进程都和主进程共享资源。 所有的渲染进程都是由主进程创建的 每个窗口都对应着一个渲染进程 所有的渲染进程共享一个主进程 我们主进程与渲染进程交互,渲染进程与渲染进程交互【

    2024年02月10日
    浏览(56)
  • C/C++ 进程间通信system V IPC对象超详细讲解(系统性学习day9)

    目录 前言 一、system V IPC对象图解 1.流程图解: ​编辑 2.查看linux内核中的ipc对象:  二、消息队列 1.消息队列的原理 2.消息队列相关的API 2.1 获取或创建消息队列(msgget)  实例代码如下: 2.2 发送消息到消息队列中  实例代码如下: 2.3 从消息队列中获取消息   实例代码如

    2024年02月08日
    浏览(35)
  • Scala第二十章节(Akka并发编程框架、Akka入门案例、Akka定时任务代码实现、两个进程间通信的案例以及简易版spark通信框架案例)

    章节目标 理解Akka并发编程框架简介 掌握Akka入门案例 掌握Akka定时任务代码实现 掌握两个进程间通信的案例 掌握简易版spark通信框架案例 1. Akka并发编程框架简介 1.1 Akka概述 Akka是一个用于构建高并发、分布式和可扩展的基于事件驱动的应用工具包。Akka是使用scala开发的库,

    2024年04月11日
    浏览(42)
  • LinuxC编程——进程间通信(一)(管道)

    复杂的编程环境通常使用多个相关的进程来执行有关操作。进程之间必须进行通信,来共享资源和信息。因此,要求内核提供必要的机制,这些机制通常称为进程间通信(InterProcess Communication, IPC)。 早期通信方式:早期的Unix IPC包括管道、FIFO和信号 ATT的贝尔实验室,对Uni

    2024年02月13日
    浏览(81)
  • Linux系统编程——进程间通信的学习

    学习参考博文: 进程间的五种通信方式介绍 Linux 信号介绍 Linux系统编程学习相关博文 Linux系统编程——文件编程的学习 Linux系统编程——进程的学习 Linux系统编程——线程的学习 Linux系统编程——网络编程的学习 常规学习Linux系统编程的内容是复杂且繁多的,不推荐刚开始

    2024年02月08日
    浏览(35)
  • 学习系统编程No.16【进程间通信】

    北京时间:2023/4/9/20:44,昨天,也就是这个周末的星期六,就是传说中的蓝桥杯,哈哈哈!摆烂,做题方面真不怎么行,可惜,当初可能是年少轻狂或者说是没什么经验阅历,希望在有了这次的经历之后,明年的今天,能够更加从容吧!谁让我们平时不怎么做题呢?准确的来

    2023年04月15日
    浏览(46)
  • Linux系统编程:采用管道的方式实现进程间通信

    目录 一. 进程间通信概述 二. 管道的概念  三. 通过管道实现进程间通信 3.1 实现原理 3.2 匿名管道创建系统接口pipe 3.3 管道通信的模拟实现 3.4 管道通信的访问控制规则 3.5 管道通信的特点 四. 通过匿名管道实现进程池 4.1 进程池的概念 4.2 进程池的模拟实现 五. 命名

    2024年02月12日
    浏览(38)
  • Linux下的系统编程——进程间的通信(九)

    前言:  前面我们已经对进程已经有了一个简单的了解与认识,那么进程间的通信是什么样的呢,什么是父子进程,什么是兄弟进程,没有血缘关系间的进程是如何实现进程通信的,下面让我们一起学习一下什么是进程间的通信吧。 目录 一、进程间通信常用方式 IPC方式:

    2024年02月09日
    浏览(32)
  • 《TCP/IP网络编程》阅读笔记--进程间通信

    目录 1--进程间通信 2--pipe()函数 3--代码实例 3-1--pipe1.c 3-2--pipe2.c 3-3--pipe3.c 3-4--保存信息的回声服务器端         为了实现进程间通信,使得两个不同的进程间可以交换数据,操作系统必须提供两个进程可以同时访问的内存空间;         为了完成进程间通信,需要创建管道

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包