- 论坛徽章:
- 0
|
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()的输出。因此,用目录作为输入比用文件作为输入是一种更好、更可靠的实现方法。
测试代码如下:
- #include <stdio.h>;
- #include <sys/ipc.h>;
- main()
- {
- char path[256];
- sprintf( path, "%s/etc", (char*)getenv("HOME") );
- printf( "key=%0X\n", ftok( path, 100 ) );
- }
复制代码 |
|