zoukankan      html  css  js  c++  java
  • 共享内存消息队列学习笔记

    2012-1-6

    IPC对象:共享内存、消息队列、信号量(信号灯集)

    key  :IPC_PRIVATE和ftok的返回值。。。。。  常用: key = IPC_PRIVATE 只能自己或者具有血缘关系的使用

    1.ftok()函数:

    key_t  ftork(“路径”, id)

    路径使用自己的工作目录,避免了key冲突。 id  任意指定一个字母,即key由路径+id组成。。。。

    2.共享内存

    特点一:效率最高的一种进程间通信。。。。(数据吞吐量大时才能体现出优势)

    共享内存必须依靠同步机制使用

    共享内存的使用步骤:

    创建共享内存   必须判断 EEXIST   IPC_CREAT|0666 ----权限

    shmget(key, size,IPC_CREAT|0666)返回一个shmid号          system(ipcs -m)查看     ipcrm –m 删除

    映射共享内存

    使用完取消共享内存映射

    删除共享内存对象   IPC_RMID(删除对象)(所有进程都不使用这个共享内存时,则最后一个使用它的进程,删除IPC对象)

    同步---通信

    A:从终端读一个数据

    开始

    创建共享内存(成功则往下执行)(IPC_EXCL判断)失败则打开

    映射

    先写入 pid(填充结构体)

    等待信号(pause())

    被唤醒后读终端

    发信号唤醒B

    B:开始

    打开共享内存

    映射

    读对方的id,写自己的id

    发信号----唤醒A

    等待pause()

    打印完---发信号

    在等待

    IPC  消息队列

    struct msgbuf

    {

             long  mtype; 消息类型

             char  mtex [N]; 消息正文

    };

    创建:int msgget(key, 权限) 权限:IPC_CREAT|0666   成功返回消息队列的ID,错误返回-1

    添加:int msgsnd(msgid, &mybuf, sizeof(struct addrbuf)- sizeof(long), 0)

    读取:int msgrcv(msgid, &mybuf,BUFSIZE, mybuff。type,  0)

    删除:int msgctl (msgid, IPC_RMID,  0)

  • 相关阅读:
    c++小游戏——2048
    c++小游戏——贪吃蛇
    218 事件处理 on() 绑定事件
    217 jQuery 元素操作:遍历,创建,添加(append、prepend、after、before),删除(remove、empty、html)
    216 jQuery 文本属性值:html() 、text() 、 val()
    215 jQuery 属性操作:prop() 、 attr() 、 data()
    214 jQuery案例:王者荣耀手风琴效果
    213 jQuery 事件切换:hover()
    212 停止动画排队: stop()
    211 jQuery 自定义动画:animate()
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2315095.html
Copyright © 2011-2022 走看看