消息队列,ftok,

本文详细介绍了Linux下的IPC(Inter-Process Communication)对象,包括消息队列、共享内存和信号量。重点讨论了如何使用ftok函数申请key值,并展示了如何查看、创建、删除IPC对象。此外,还探讨了消息队列的特点和使用场景,提供了创建和操作消息队列的函数接口msgget、msgsnd和msgrcv的示例代码。
摘要由CSDN通过智能技术生成

一、IPC对象。
1、 什么是IPC对象?
在linux下,IPC对象指的是消息队列、共享内存、信号量。如果用户需要使用IPC对象进行进程之间的通信,首先必须要为IPC对象申请对应资源(key值、ID号)。例如如果你想使用消息队列来通信,那么你就必须为消息队列申请key值与ID号。

2、查看当前系统中所有的IPC对象?
1)查看IPC对象:  ipcs -a

------ Message Queues --------  //消息队列
key             msqid          owner      perms      used-bytes       messages   
消息队列key值   消息队列ID号    所有者      权限       总字节数         消息个数

------ Shared Memory Segments --------  //共享内存
key            shmid           owner      perms      bytes      nattch        status
共享内存key值   共享内存ID号    所有者      权限       总字节数   进程使用个数   状态

------ Semaphore Arrays --------  //信号量
key            semid           owner      perms      nsems 
信号量key值     信号量的ID号    所有者      权限       信号量元素的个数

2)删除IPC对象。
想删除消息队列: ipcrm -q 消息队列key值  /   ipcrm -q 消息队列ID号
想删除共享内存: ipcrm -m 共享内存key值  /   ipcrm -m 共享内存ID号
想删除信号量:   ipcrm -s 信号量key值    /   ipcrm -s 信号量ID号

3、如果想使用IPC对象,那么如何申请key值?  -> ftok()   -> man 3 ftok
功能: ftok - convert a pathname and a project identifier to a System V IPC key
        //给一个路径和一个数字就可以得到一个key值。

头文件:#include <sys/types.h>
       #include <sys/ipc.h>

原型:
    key_t ftok(const char *pathname, int proj_id);

参数:
    pathname:一个存在并且合法的路径  "."
    proj_id:非0整数                 10

返回值:(key_t)
    成功:key值
    失败:-1

分析:
 The  resulting  value  is  the  same for all pathnames that name the same file, when the same value of proj_id is  used.
//当两个ftok()函数的参数文件路径与project_id都一样时,两个函数的返回值是一样。  

 The value returned should be different when the (simultaneously existing) files or the project IDs differ.
//只要文件路径/proj_id有一个不一样,那么返回值就不一样。

4、 测试示例:
#include <sys/types.h>
#include <sys/ipc.h>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值