ftok用法
转载:
http://www.cnblogs.com/hjslovewcl/archive/2011/03/03/2314344.html
http://www.cnblogs.com/lihaozy/archive/2012/08/07/2626391.html
函数ftok把一个已存在的路径名和一个整数标识得转换成一个key_t值,称为IPC键:
key_t ftok(const char *pathname, int proj_id);
DESCRIPTION
The ftok function uses the identity of the file named by the given pathname (which must refer to an existing, accessible file) and the least significant 8 bits of proj_id (which must be nonzero) to generate a key_t type System V IPC key。
该函数把从pathname导出的信息与id的低序8位组合成一个整数IPC键。
使用时候需要注意两点:
一/产生不同的键值需要不同的pathname和不同的proj_id做参数,不同pathname和通过一个proj_id可能会产生同一个键值.
示例代码1:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>
/*
26 * === FUNCTION ======================================================================
27 * Name: main
28 * Description:
29 * =====================================================================================
30 */
int
main ( int argc, char *argv[] )
{
struct stat stat1; if ( argc != ) {
printf("need two arguments.\n");
return EXIT_FAILURE;
} stat(argv[], &stat1);
printf("st_dev:%lx, st_innode:%lx, key:%x\n",
(u_long)stat1.st_dev, (u_long)stat1.st_ino, ftok(argv[],0x0957)); return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */
运行结果1:
root@3me:/home/zfk/work/apue/chapter15# ./ .c
st_dev:, st_innode:18e02b2, key:570102b2
root@3me:/home/zfk/work/apue/chapter15#
结果分析:
1.pathname所在的文件系统的信息(stat结构的st_dev成员)
2.该文件在本文件系统内的索引节点号(stat结构的st_ino成员)
3. proj_id的低序8位(不能为0)
root@3me:/home/zfk/work/apue/chapter15# stat
文件:""
大小: 块: IO 块: 普通文件
设备:801h/2049d Inode: 硬链接:
权限:(/-rw-r--r--) Uid:( / root) Gid:( / root)
最近访问:-- ::25.268217896 +
最近更改:-- ::25.268217896 +
最近改动:-- ::25.296217898 +
创建时间:-
root@3me:/home/zfk/work/apue/chapter15# ./
st_dev:, st_innode:18e02b3, key:570102b3
root@3me:/home/zfk/work/apue/chapter15# rm -rf
root@3me:/home/zfk/work/apue/chapter15# touch
root@3me:/home/zfk/work/apue/chapter15# stat
文件:""
大小: 块: IO 块: 普通空文件
设备:801h/2049d Inode: 硬链接:
权限:(/-rw-r--r--) Uid:( / root) Gid:( / root)
最近访问:-- ::50.276218127 +
最近更改:-- ::50.276218127 +
最近改动:-- ::50.276218127 +
创建时间:-
root@3me:/home/zfk/work/apue/chapter15# ./
st_dev:, st_innode:18e02aa, key:570102aa
root@3me:/home/zfk/work/apue/chapter15#
运行结果可以看出,虽然文件名称都是 1,并未改变,但由于中间发生了文件删除并重新创建的操作,前后两次所得到的键值已经不再相同。
ftok用法的更多相关文章
- Linux IPC实践(6) --System V消息队列(3)
消息队列综合案例 消息队列实现回射客户/服务器 server进程接收时, 指定msgtyp为0, 从队首不断接收消息 server进程发送时, 将mtype指定为接收到的client进程的pid ...
- saltstack:使用教程之二高级模块用法Grains、Pillar
1.grains用法: 在客户端服务启动的时候收集客户的基础信息,在配置发生变化后也可以通过master重新同步 显示一个客户端的所有项目: [root@node5 ~]# salt "no ...
- Flash访问模块FDS用法及常见问题—nRF5 SDK模块系列一
FDS,全称Flash Data Storage,用来访问芯片内部Flash的.当你需要把数据存储在Flash中,或者读取Flash中的用户数据,或者更新或者删除Flash中的数据,那么FDS模块是你 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
随机推荐
- VUE DIV模拟input框的基本处理
关键代码 <div class="dialog-main" :contenteditable= "editable" v-text="notic ...
- AJAX - 服务器 响应
AJAX - 服务器 响应 服务器响应 如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性.大理石构件来图加工 属性 描 ...
- 删除操作——str.subString(0,str.length()-1)
subString是String的一个方法,格式为: public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个 ...
- scrapy项目2:爬取智联招聘的金融类高端岗位(spider类)
---恢复内容开始--- 今天我们来爬取一下智联招聘上金融行业薪酬在50-100万的职位. 第一步:解析解析网页 当我们依次点击下边的索引页面是,发现url的规律如下: 第1页:http://www. ...
- macOS 更新 git 命令提示 xcrun,.gitignore 配置不生效问题。
macOS 更新 运行git提示xcrun: error: invalid active developer path 在终端输入 xcode-select --install 即可以解决该问题 .g ...
- xor or and 线段树
每一位维护一颗线段树 (-1)^1 =-2 (-2)^1=-1 #include <cstdio> #include<iostream> using namespace std ...
- CodeChef-----February Challenge 2018---Broken Clock(极坐标+三角函数递推+矩阵快速幂)
链接: https://www.codechef.com/FEB18/problems/BROCLK Broken Clock Problem Code: BROCLK Chef has a clo ...
- [CSP-S模拟测试]:格式化(贪心)
题目传送门(内部题105) 输入格式 每组数据第一行一个正整数$n$,表示硬盘块数,接下来$n$行,每行两个正整数,第一个正整数为硬盘格式化前的容量,第二个正整数为格式化之后的容量. 输出格式 对每组 ...
- vue 在移动端实现红包雨 (兼容性好)
下面是代码:<template> <div class="ser_home"> <ul class="red_packe ...
- What's the difference between HEAD^ and HEAD~ in Git?
https://stackoverflow.com/questions/2221658/whats-the-difference-between-head-and-head-in-git Rules ...