zoukankan      html  css  js  c++  java
  • 一起talk C栗子吧(第九十六回:C语言实例--使用共享内存进行进程间通信二)


    各位看官们。大家好,上一回中咱们说的是使用共享内存进行进程间通信的样例,这一回咱们接着上一回内容继续说使用共享内存进行进程间通信

    闲话休提,言归正转。让我们一起talk C栗子吧!

    我们在上一回中介绍了共享内存的概念和相关函数的使用方法。这一回中我们通过详细的样例来说明怎样使用共享内存进行进程间的通信。以下是使用共享内存的详细步骤:

    • 1.定义一个结构体类型,用来当作共享内存的类型;
    • 2.使用shmget函数获取共享内存,代码中的键使用了111这个随机数字。
    • 3.使用shmat函数把共享连接到进程的地址空间中。
    • 4.从共享内存中读取数据,或者向共享内存中写入数据;
    • 5.使用shmdt函数把共享内存从进程的地址空间中分离出来;
    • 6.使用shmctl函数删除共享内存,须要使用的命令:IPC_RMID;

    看官们,正文中就不写代码了。详细的代码放到了我的资源中。大家能够点击这里下载使用。

    以下是程序的执行结果,请大家參考:

    ./s -r                                  //执行程序而且使用-r參数。表示启动读取数据的进程
    there is not any data in share memory   //这时共享内存中还没有数据
    ./s -w                                  //执行程序而且使用-w參数,表示启动写入数据的进程
    write data into share memory.count:3,data:hello share memory //提示写入的数据
    ./s -r                                //再次执行程序而且使用-r參数,表示启动读取数据的进程                
    the data of share memory.count:3,data:hello share memory  //显示从共享内存中读取的数据

    在程序中我们使用參数来区分不同的进程,同一时候使用一个标记位来推断共享内存中是否有数据。另外。使用共享内存进行进程间通信时须要使用同步机制,比方我们在刚開始执行程序时,由于还没有执行写进程,共享内存中没有数据,这时候,读进程不能从共享内存中读取到数据。

    各位看官,关于使用共享内存进行进程间通信的样例咱们就讲到这里。欲知后面还有什么样例,且听下回分解 。


  • 相关阅读:
    CentOS7搭建SFTP服务
    MySQL主从异常恢复
    MySQL主从复制配置
    Docker安装MySQL8.0
    CentOS7安装JDK1.8
    RabbitMQ死信队列
    RabbitMQ重试机制
    RabbitMQ消息可靠性传输
    TCP/IP的Socket编程
    c#网络编程使用tcpListener和tcpClient
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7152328.html
Copyright © 2011-2022 走看看