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

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

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

环境:
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

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,因为方便移植。
友情提示:我们在使用前,应该多看看帮助文档,因为可以少让你踩很多坑。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值