函数ftok()
用来生成 IPC key,而 IPC key 可以用来创建 IPC 对象,或者说创建 IPC
对象时可能会用到 IPC key。
ftok()
函数
1 |
|
ftok()
会接受两个参数,第一个是一个文件路径,必须是一个存在的文件,因为 IPC key
的生成需要文件结点的信息。第二个参数proj_id
是自己指定的,个人理解这个参数可以
使得一个文件可以生成多个 key,而不用出现为了一个生成 key 就建一个文件的情况。手
册上说proj_id
的最低 8 比特不能为 0,但是我尝试传入 0 也能调用成功。
当pathname
和proj_id
相同时,ftok()
的返回值也相同,而当它们不同时,也能保证
不相同,这点很重要。
下面是一个小的例子程序:
1 |
|
从结果也可以看出,ftok()
的返回值跟proj_id`
st_devst_ino`有很大的关系。
struct ipc_perm
结构体
1 | struct ipc_perm { |
命令man msgctl
man semctl
man shmctl
都可以查看到上述定义。每一个 IPC 对象都
对应一个ipc_perm
结构体。其中uid
gid
mode
是可以由函数msgctl()
semctl()
和shmctl()
来修改的。