进程间通信Linux

06-01 1145阅读

目录

进程间通信介绍

进程间通信目的

进程间通信发展

进程间通信分类

管道

System V IPC

POSIX IPC

管道

什么是管道

匿名管道

用fork来共享管道原理

站在文件描述符角度-深度理解管道

管道读写规则

管道特点

命名管道

创建一个命名管道

匿名管道与命名管道的区别

命名管道的打开规则

system V共享内存

共享内存示意图

共享内存数据结构

共享内存函数

shmget函数

shmat函数

shmdt函数

shmctl函数

自己总结

共享内存

​编辑


  • 进程间通信介绍
  • 管道
  • 消息队列
  • 共享内存
  • 信号量

    进程间通信介绍

    进程间通信目的

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

      进程间通信发展

      • 管道
      • System V进程间通信
      • POSIX进程间通信

        进程间通信分类

        管道

        • 匿名管道pipe
        • 命名管道

          System V IPC

          • System V 消息队列
          • System V 共享内存
          • System V 信号量

            POSIX IPC

            • 消息队列
            • 共享内存
            • 信号量
            • 互斥量
            • 条件变量
            • 读写锁

              管道

              什么是管道

              • 管道是Unix中最古老的进程间通信的形式。
              • 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”

                进程间通信Linux

                匿名管道

                匿名管道 Linux-CSDN博客    详细看这里

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

                进程间通信Linux

                管道

                首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写到管道里,然后再通过read系统调用,被对方(读端)读取,就要从管道拷贝到读端,然后再显示到显示器上。

                pipe创建一个管道

                pipe的介绍进程间通信Linux

                1完成这件事:进程间通信Linux

                看图分析

                进程间通信Linux

                运行结果

                进程间通信Linux

                #include
                #include
                using namespace std;
                int main()
                {
                    //创建管道
                    //先创建一个pipefd数组
                    int pipefd[2];
                    //用n接受一下,判断是否成功
                    int n = pipe(pipefd);
                    if(n
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码