ftok()

功能:专门用于生成 ipckey

#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
参数:
	pathname:存在且可访问的目录/文件
	proj_id:虽说是 int 类型,但只有低 8 位有效
返回值:
	成功返回 key_t(类似 pid_t) 值
	失败返回 -1,并设置错误码
注意:传入的参数相同,生成的 key_t 值相同

[mam@test24 tmp]$ ll
total 16
-rwx------ 1 mam mam 8536 Mar 26 14:49 test_ftok
-rw------- 1 mam mam 1328 Mar 26 14:46 main.c
drwx------ 2 mam mam    6 Mar 26 10:29 test_dir
-rw------- 1 mam mam    0 Mar 26 11:50 test_file
[mam@test24 tmp]$ pwd
/home/mam/tmp

[usr2@test24 ~]$ ll
total 0
drwxrwxr-x 2 usr2 usr2    23 Mar 26 14:35 mam
[usr2@test24 ~]$ ll mam
total 0
-rw-rw-r-- 1 usr2 usr2 0 Mar 26 14:58 test_file
[usr2@test24 ~]$ pwd
/home/usr2 

$ cat main.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>

/* 不存在 */
#define _DIR    "./rmp"
#define _FILE   "./rmp_file"

/* 存在且可访问 */
#define _DIR2   "./test_dir"
#define _FILE2  "./test_file"

/* 存在但不可访问 */
#define _DIR3   "/home/usr2/mam"
#define _FILE3  "/home/usr2/mam/test_file"

/* 0 和 256 验证 ftok() 的 proj_id 只有低 8 位有效 */
#define _ID     0
#define _ID2    1
#define _ID3    255
#define _ID4    256

int main()
{
  key_t ipckey;

  ipckey = ftok(_DIR2, _ID);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_DIR2, _ID2);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_DIR2, _ID3);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_DIR2, _ID4);
  printf("%d, %x\n", ipckey, ipckey);

  ipckey = ftok(_FILE2, _ID);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_FILE2, _ID2);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_FILE2, _ID3);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_FILE2, _ID4);
  printf("%d, %x\n", ipckey, ipckey);

  ipckey = ftok(_DIR, _ID);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_FILE, _ID);
  printf("%d, %x\n", ipckey, ipckey);

  ipckey = ftok(_DIR3, _ID);
  printf("%d, %x\n", ipckey, ipckey);
  ipckey = ftok(_FILE3, _ID);
  printf("%d, %x\n", ipckey, ipckey);

  return 0;
}

/*
  180814, 2c24e
  16958030, 102c24e
  -16596402, ff02c24e
  180814, 2c24e
  141182, 2277e
  16918398, 102277e
  -16636034, ff02277e
  141182, 2277e
  -1, ffffffff
  -1, ffffffff
  -1, ffffffff
  -1, ffffffff
 */
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值