标签:style http color os 使用 io ar 文件 div
前两天遇到的关于ftok()函数的问题,当时发了帖子求助,解决后整理于此!
帖子在这儿:ftok产生的key冲突了
最近遇到一个问题,在用户b下创建共享内存失败,跟踪代码发现shmget的errno为17(要创建的这个共享内存已经存在了),可是在该用户下通过ipcs查看确实没有共享内存啊,后来发现,用户a下已经创建的共享内存与用户b要创建的共享内存冲突了,准确的说是key值冲突了,key值是通过ftok函数生成的。
小弟恳请大神点拨说明,感谢万分!
用户a和b 文件i节点及程序调试查看ftok产生的key值如下
用户a:
1
2
|
a-/home/a/etc/ipckey>ls -li 2097174 -rwxrw-r--. 1 a a 0 Sep 22 2013 comm |
1
2
3
4
5
6
7
|
64 sprintf (strPath, "%s/etc/ipckey/comm" , getenv ( "HOME" )); (gdb) p strPath $1 = "/home/a/etc/ipckey/comm" , ‘\000‘ <repeats 91 times> (gdb) n 67 if ((ilShareKey = ftok(strPath,1)) == (key_t)-1) (gdb) p ilShareKey $2 = 16908310 |
1
2
|
b-/home/b/etc/ipckey>ls -li 2228246 drwxr-xr-x. 2 b b 4096 Sep 22 2013 trnlog |
1
2
3
4
5
6
7
|
64 sprintf (strPath, "%s/etc/ipckey/trnlog" , getenv ( "HOME" )); (gdb) p strPath $1 = "/home/b/etc/ipckey/trnlog" , ‘\000‘ <repeats 89 times> (gdb) n 67 if ((ilShareKey = ftok(strPath,1)) == (key_t)-1) (gdb) p ilShareKey $2 = 16908310 |
1
|
key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) | ((proj_id & 0xff) << 24)); |
1
2
|
a-/home/a/etc/ipckey>stat -c "%i %d" comm 2097174 64770 |
1
2
|
b-/home/b/etc/ipckey>stat -c "%i %d" trnlog 2228246 64770 |
标签:style http color os 使用 io ar 文件 div
原文地址:http://blog.csdn.net/pinyue/article/details/38960031