首页 > 系统相关 >Linux IPC(进程间通信)摘要(信号灯,共享内存,消息队列,管道)(一)

Linux IPC(进程间通信)摘要(信号灯,共享内存,消息队列,管道)(一)

时间:2023-02-11 16:33:26浏览次数:44  
标签:IPC System 间通信 信号量 mq Linux Posix sem

PS:要转载请注明出处,本人版权所有。

PS: 这个只是基于《我自己》的理解,

如果和你的原则及想法相冲突,请谅解,勿喷。

前置说明

  本文作为本人csdn blog的主站的备份。(BlogID=024)
  本文发布于 2016-07-20 16:16:28,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=024)

环境说明

Linux 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

前言


  1. IPC---Inter-Process Communication(进程间通信)
  2. UNIX 与 LINUX 没有直属血缘关系,是一个新创建的操作系统。LINUX可以说成参考MINIX(一个类UNIX系统,中间的缘由可以由自己百度)自己写的一个操作系统系统。
  3. System V 是一个UNIX 系统的分支。POSIX是一个IEEE定制的一个标准。(可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ))。
  4. IPC 的种类很多,大概有一下几种:
    • A 原始的UNIX IPC
    • B 在A的基础上进化出System V IPC
    • C 在A的基础上进化出Socket IPC
    • D 由IEEE协会制定的POSIX标准中的IPC
    • E 由A,B,C,D 综合发展得到Linux IPC




IPC




Linux IPC

  由于一些历史原因,现在的linux内核里面常见的就是System V 和 Posix的通信。至于Socket IPC 已经被Linux 独立出来,叫做Linux 网络通信,其实本质上还是IPC,只不过由单机IPC,变为了多机IPC.(主要还是由tcp/ip协议作为支撑)



System V IPC
  1. System V IPC主要包括:System V消息队列、System V信号灯、System V共享内存区。
  2. System V IPC 有一个很明显的特征,那就是有一个关键字能够代表这个IPC,很明显这个关键字必须唯一的。得到这个关键字的方法有多种,但是我只用过一种,那就是用ftok()得到。
  3. API集合
    • A System V消息队列
      • msgget()根据key与flag访问或者创建IPC对象。
      • msgctl()控制与销毁IPC对象
      • msgsnd/msgrcv()发送/接受消息
    • B System V信号灯
      • semget()根据key与flag访问或者创建IPC对象。
      • semctl()控制与销毁IPC对象
      • semop()操作IPC对象,也就是PV操作实现
    • C System V共享内存区
      • shmget()根据key与flag访问或者创建IPC对象。
      • shmctl()控制与销毁IPC对象
      • shmat()连接共享内存
      • shmdt()与共享内存分离



Posix IPC

  Posix IPC的的特征也很明显,与System V对比。首先API命名改变。是由IPC名称_IPC操作构成。其次是以一个名字作为标识符标示一个IPC对象。如信号量族:sem_open()/sem_close()/sem_trywait()/sem_post()

  • A Posix 信号量(命名信号量,未命名信号量(亲缘进程通信))
    • sem_open()/sem_close() 信号量打开或者创建。/信号量关闭。
    • sem_wait()/sem_trywait() V操作
    • sem_post()P 操作
    • sem_unlink()删除信号量
    • sem_getvalue()获取值
    • sem_init()未命名信号量初始化
    • sem_destory()未命名信号量销毁
  • B Posix 共享内存
    • shm_open()/shm_unlink()打开内存区域/删除内存区域
    • ftruncate()清空内存区域
    • fstat()通过文件描述符获取文件对应的属性。文件打开后这样操作.
    • mmap()映射数据(文件)到当前进程空间
    • munmap()与mmap相反
  • C Posix 消息队列
    • mq_open()/mq_close()同上可得
    • mq_unlink()同上可得
    • mq_getattr()/mq_setattr()设置或得到mq的属性
    • mq_send()同英文含义
    • mq_receive()同英文含义
    • mq_notify()同英文含义


IPC 之管道

  管道分为命名管道和非命名管道,此概率可类比Posix 信号量。

  • unamepipe API:
    • pipe()建立匿名管道
  • namedpipe/fifo API:
    • mkfifo() 建立一个有名管道
    • unlink() 删除有名管道
  • 管道操作:
    • read()/write()




后记


  从上面我们可以看到posix ipc比 system v 使用起来简单。但是也有一些不足。我们平时都是综合应用这些东西,就能够很好的完成工作了。当然,现在越来越倾向与写Posix IPC,因为方便移植。

  友情提示:我们在使用前,应该多看看帮助文档,因为可以少让你踩很多坑。

参考文献




打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
qrc_img

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。

标签:IPC,System,间通信,信号量,mq,Linux,Posix,sem
From: https://www.cnblogs.com/Iflyinsky/p/17111939.html

相关文章

  • linux使用hostapd+dnsmasq管理多张网卡,搭建dns服务器,并发射wifi热点(支持360wifi等等)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文发布于2015-03-0318:37:39,现用MarkDo......
  • 关于linux系统版本的一个分类展现
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文发布于2014-07-0622:58:35,现用MarkDo......
  • 关于linux在笔记本下耗电的解决方案(只写我实践的部分)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文发布于2014-09-2212:02:54,现用MarkDo......
  • linux004之 vi和vim编辑器
    vi、vim编辑器简介:是linux中的文本编辑器,用来在linux系统中查看或编辑文本文件的命令,相当于windows文本编辑器。vi和vim的区别,vim是增强版,功能相比vi是增强了......
  • linux003之远程操作
    Xshell简介:Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及MicrosoftWindows平台的TELNET协议。Xshell通过互联网到远程主机,可以操控到linux服务器。......
  • linux 安装 zabbix6.2
    选择您Zabbix服务器的平台   allandconfigureZabbixforyourplatforma.InstallZabbixrepository#rpm-Uvhhttps://repo.zabbix.com/za......
  • linux vsftp
    1、安装vsftp服务yum-yinstalllibdb-utilsyum-yinstallvsftpd 2、创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt输入vftp123456 3、生成Vsftpd虚拟......
  • Linux手动启动、关闭、重启jar包相关shell脚本
    1、启动文件start.sh#!/bin/sh###APP_NAME=$(basename$(dirname"$PWD"))JAVA_OPTS="-Djava.awt.headless=true-Djava.net.preferIPv4Stack=true"JAVA_DEBUG_......
  • 【学习记录】Linux命令缩写
    最近有空看了一点Linux的相关内容,觉得命令的英文全拼还挺有意思的,记住全拼也加深了对命令的理解,所以打算记录一下常用命令(部分)的全拼。PS:英语学计算机果然带点天然优势......
  • #yyds干货盘点#分析一下Linux 的top 命令
    ​​top​​ 命令是一个系统监测工具,它显示了当前系统中最消耗资源的进程,帮助系统管理员快速了解系统的运行情况和性能瓶颈。它在Linux操作系统中是一个非常常用的命令。......