ftok

系統IPC鍵值的格式轉換函式

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()的設計目的也在於此。

相關詞條

相關搜尋

熱門詞條

聯絡我們