免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sunlan
打印 上一主题 下一主题

[函数] ftok()函数在不同平台下实现的兼容性 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-12-04 23:20 |只看该作者

ftok()函数在不同平台下实现的兼容性

是,正因为如此,俺从来不用ftok。
俺的IPC都是使用一个3字节的标识族的,就像Informix那样。

论坛徽章:
0
12 [报告]
发表于 2004-12-06 10:32 |只看该作者

ftok()函数在不同平台下实现的兼容性

今天又做了以下实验:

1。执行key,输出key=6405C013
2。修改aaa.txt,执行key,输出key=6405C014
3。修改aaa.txt,执行key,输出key=6405C013
4。创建bbb.txt,修改aaa.txt,执行key,输出key=6405C015

以上步骤说明vi在保存文件时是创建一个新的文件用于保存修改后的文件内容,并将原文件删除(1~3),并且创建文件时查找了最接近的inode(因此导致1、3两步的输出相同)。在创建了bbb.txt后,由于最接近的inod已被占用,vi只能再另找位置存放文件,导致第4步的输出发生变化。以上判断是否正确,希望仔细研究过linux这部分源代码的弟兄指正。

另外,还试验了用目录名代替文件名作为ftok()输入的情况。测试发现对该目录下文件的创建、修改、删除都不影响ftok()的输出。因此,用目录作为输入比用文件作为输入是一种更好、更可靠的实现方法。

测试代码如下:

  1. #include <stdio.h>;
  2. #include <sys/ipc.h>;

  3. main()
  4. {
  5.         char path[256];

  6.         sprintf( path, "%s/etc", (char*)getenv("HOME") );

  7.         printf( "key=%0X\n", ftok( path, 100 ) );
  8. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2004-12-06 11:05 |只看该作者

ftok()函数在不同平台下实现的兼容性

[quote]原帖由 "sunlan"]以上步骤说明vi在保存文件时是创建一个新的文件用于保存修改后的文件内容,并将原文件删除(1~3),并且创建文件时查找了最接近的inode(因此导致1、3两步的输出相同)。在创建了bbb.txt后,由于最接近的inod已被占用,vi只能再另找位置存放文件,导致第4步的输出发生变化。[/quote 发表:


大概就是这样的了!!这样说来就不是Linux的bug了,而是编辑器的问题。
看来最好还是用目录名做参数好一点~~

论坛徽章:
0
14 [报告]
发表于 2004-12-06 11:43 |只看该作者

ftok()函数在不同平台下实现的兼容性

[quote]原帖由 "sunlan"]用目录作为输入比用文件作为输入是一种更好、更可靠的实现方法。[/quote 发表:

目录的删除重建一样会导致key变化。
如果你参考一个目录A,我因为要修改目录里的很多内容,把它mv成A.bak,然后我再建立一个新的A,结果会怎样?
最好的方法是不用ftok!为什么Informix不用ftok?为什么CICS不用ftok?为什么我们非要用ftok?

论坛徽章:
0
15 [报告]
发表于 2004-12-06 12:36 |只看该作者

ftok()函数在不同平台下实现的兼容性

原帖由 "FH" 发表:

目录的删除重建一样会导致key变化。
如果你参考一个目录A,我因为要修改目录里的很多内容,把它mv成A.bak,然后我再建立一个新的A,结果会怎样?
最好的方法是不用ftok!为什么Informix不用ftok?为什么CICS不用f..........


这涉及到作为参数的目录的选择问题。一般情况下象etc这样的目录是不太可能被删除或重命名的,尤其是在生产系统上。使用ftok()的原因是其实现比较方便。举个例子,一台前置机上跑两个营业网点的程序,由于业务的一致性,其程序完全相同,但各自有不同的通讯域,因此需要通过不同的ipc键值来区分。通过各自的$HOME/etc目录可以获得自己的ipc键值,这是一种很现实的解决办法。这样的情况是很常见的。

论坛徽章:
0
16 [报告]
发表于 2004-12-06 13:13 |只看该作者

ftok()函数在不同平台下实现的兼容性

真没觉得ftok简单过,不用ftok也有解决这种问题的简单方法啊,比如用网点编号之类的东西。

论坛徽章:
0
17 [报告]
发表于 2007-02-07 10:09 |只看该作者
ftok如果使用的是二进制文件作为第一参数的话,会完全破坏该文件

论坛徽章:
0
18 [报告]
发表于 2010-08-23 18:39 |只看该作者
挖到了这么多年前的帖子,好帖啊,沿着牛人们的轨迹走,有点兴奋哦{:3_200:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP