linux程序通訊 ftok函式

2021-10-20 21:41:18 字數 1116 閱讀 4467

作用:系統建立ipc通訊 (訊息佇列、訊號量和共享記憶體) 時必須指定乙個id值。通常情況下,該id值通過ftok函式得到。

原型:

#include

#include

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

程序間通訊 比較臉熟的ftok

老師在講這個函式時沒有什麼感覺,當我做了試驗後,其實也沒有什麼感覺。就是當我在改進實驗的時候,問題就來了,就在ftok 這齣的的錯誤。不過先不去了解它的作用來先說說為什麼要用它,共享記憶體,訊息佇列,訊號量它們三個都是找乙個中間介質,來進行通訊的,這中介質多的是。就是怎麼區分出來,就像唯一乙個身份證...

Linux中ftok函式介紹

函式原型 key t ftok const char fname,int id 功能 系統建立ipc通訊 如訊息佇列,共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到 返回值 成功返回乙個key t值,失敗返回 1 引數說明 在一般的unix實現中,是將檔案的索引節點號去取...

ftok函式用法

系統建立ipc通訊 如訊息佇列 共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到。ftok原型如下 key t ftok char fname,int id fname就時你指定的檔名 該檔案必須是存在而且可以訪問的 id是子序號,雖然為int,但是只有8個位元被使用 0 ...