功能:专门用于生成 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
*/
ftok()
于 2024-03-26 17:17:46 首次发布