複製鏈接
請複製以下鏈接發送給好友

ftok

鎖定
ftok是系統IPC鍵值的格式轉換函數。
中文名
ftok函數
外文名
ftok
IPC通訊
消息隊列信號量共享內存
ftok原型
頭文件

目錄

ftok函數

系統建立IPC通訊 (消息隊列信號量共享內存) 時必須指定一個ID值。通常情況下,該id值通過ftok函數得到。

ftok原型

頭文件
#include <sys/types.h>
#include <sys/ipc.h>
函數原型:
key_t ftok( const char * fname, int id )
fname就是你指定的文件名(已經存在的文件名),一般使用當前目錄,如:
key_t key;
key = ftok(".", 1); 這樣就是將fname設為當前目錄。
id是子序號。雖然是int類型,但是隻使用8bits(1-255)。
在一般的UNIX實現中,是將文件的索引節點號取出,前面加上子序號得到key_t的返回值。
如指定文件的索引節點號為65538,換算成16進製為0x010002,而你指定的ID值為38,換算成16進製為0x26,則最後的key_t返回值為0x26010002。
查詢文件索引節點號的方法是: ls -i
當刪除重建文件後,索引節點號由操作系統根據當時文件系統的使用情況分配,因此與原來不同,所以得到的索引節點號也不同。
如果要確保key_t值不變,要麼確保ftok的文件不被刪除,要麼不用ftok,指定一個固定的key_t值,比如:
#define IPCKEY 0x111
char path[256];
sprintf( path, "%s/etc/config.ini", (char*)getenv("HOME") );
msgid=ftok( path, IPCKEY );[/code]
同一段程序,用於保證兩個不同用户下的兩組相同程序獲得互不干擾的IPC鍵值。
由於etc/config.ini(假定)為應用系統的關鍵配置文件,因此不存在被輕易刪除的問題——即使被刪,也會很快被發現並重建(此時應用系統也將被重啓)。
ftok( )的設計目的也在於此。