如何用ftok来产生相关的key_t值

在System V中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。这个在IPC的环境中十分的重要,比如说,服务器创建了一个消息队列,等待客户机发送请求。那么如何创建或者打开已有的消息队列呢?一般而言,我们对于服务器使用的路径和项目id(proj_id)是已知的,所以客户机可以获取相同的key来打开 消息队列并进行操作。下面就是ftok的使用原型:
# include <sys/types.h>
# include <sys/ipc.h>

key_t ftok(const char *pathname, int proj_id);
注意:
1)pathname一定要在系统中存在
2)pathname一定是使用进程能够访问的
3)proj_id是一个1-255之间的一个整数值,典型的值是一个ASCII值。
当成功执行的时候,一个key_t值将会被返回,否则-1被返回。我们可以使用errno来确定具体的错误信息(对于errno的相关信息,请参考 http://blog.csdn.net/hello_wyq/archive/2006/08/01/1006216.aspx),如果我们很懒惰的话,不妨就使用perror函数来答应对应的出错字符信息。
下面的程序简单的演示和打印如何使用ftok及其对应值
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>

int main( void )
{
    for ( int i = 1; i < 256; ++ i )
        printf( "key = %ul/n", ftok( "/tmp", i  ) );

    return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]中提到,ftok函数的功能是通过文件信息和计划编号合成一个IPC key键。该函数的返回是一个key_t类型的,即IPC键。参数pathname是指定的文件路径,该文件必须存在且可存取。参数proj_id是计划代号,用于让一个文件能够生成多个IPC key键ftok函数利用同一文件最多可得到256个IPC key键,因为它只取proj_id二进制的后8位,即16进制的后两位与文件信息合成IPC key键。 引用\[2\]中给出了ftok函数的声明,它包含在sys/ipc.h头文件中。 引用\[3\]中解释了通常使用ftok函数将一个已存在的路径名和一个整数标识符转换成一个IPC键。这个键可以通过ftok函数生成,也可以直接指定一个整数。需要注意的是,键的正负问题也需要考虑。 综上所述,key_t ftok函数的作用是通过文件信息和计划编号生成一个IPC键。 #### 引用[.reference_title] - *1* [key_t键和ftok函数](https://blog.csdn.net/weixin_36750623/article/details/83044571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【IPC通信】key_t键和ftok函数](https://blog.csdn.net/oNelson123/article/details/109660680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值