环境编程代码实例:进程间通信(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日
    浏览(40)
  • electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

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

    2024年02月10日
    浏览(61)
  • 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日
    浏览(38)
  • Scala第二十章节(Akka并发编程框架、Akka入门案例、Akka定时任务代码实现、两个进程间通信的案例以及简易版spark通信框架案例)

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

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

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

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

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

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

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

    2023年04月15日
    浏览(48)
  • 《TCP/IP网络编程》阅读笔记--进程间通信

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

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

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

    2024年02月09日
    浏览(35)
  • Linux系统编程:采用管道的方式实现进程间通信

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

    2024年02月12日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包