zoukankan      html  css  js  c++  java
  • SystemV-IPC

    这里记录的三种SystemV-IPC包括(消息队列,信号量以及共享内存)

    1:标识符和键值

      键值(key_t) : IPC结构的外部名(所谓外部名就是各用户进程可获得并操作的,通过它使用XXXget获得IPC结构的内部名"标识符").

    键值是key_t数据类型,可以通过ftok函数获得,原型: key_t  ftok(const chat *path,  int id); ftok函数将一个已存在的路径名path和一个整数id(0~255)组合成一个key_t数据返回。

      标识符 : IPC结构的内部名,是内核通过XXXget函数返回的,它标识了系统中唯一一个IPC结构,通过标识符来进行进程间的数据通信

    有几种方法让不同进程通过操作同一个IPC来进行通信:

      1:服务器进程使用IPC_PRIVATE键来替代用ftok来产生的键,通过XXXget获得返回的标识符,将标识符保存在一个文件中,此后要和服务器进程进行通信的进程通过打开此公知的文件获得标识符。

      2:IPC_PRIVATE也可以用于父子进程中,父进程创建IPC结构获得标识符,子进程拿到标识符通过exec传递标识符到新程序,那么新程序就可以使用此标识符和父进程进行通信。

      3:在公共文件中定义好path和id,让要互相通信的进程获得path和id通过ftok生成key来找到IPC来进行通信。

    2:消息队列

      打开一个已存在的队列或者创建一个新的队列:

      原型 : int msget(key_t  key,  int  flag);

      参数 :

         key : 由ftok返回的或者是宏IPC_PRIVATE,如果是IPC_PRIVATE就一定是创建一个新的IPC队列

        flag :  

      

  • 相关阅读:
    MVC的布局页,视图布局页和分布页的使用
    C#程序的编译过程
    页面跳转到Area区域连接
    c#静态变量和非静态变量的区别
    C#设计模式:适配器模式(Adapter Pattern)
    依赖注入
    打印随机数到字符串中
    printf/scanf格式
    用fread和fwrite实现文件复制操作
    用fseek和ftell获取文件的大小
  • 原文地址:https://www.cnblogs.com/Flychown/p/7501555.html
Copyright © 2011-2022 走看看