程序通訊中鍵值和識別符號的關係

2021-07-31 02:14:04 字數 906 閱讀 4437

在建立乙個訊息佇列(其他ipc相同)時,需要先通過檔案路徑名和專案id獲取乙個鍵值,然後通過此鍵值由核心生成識別符號,在以後可通過此識別符號來使用此訊息佇列。

為什麼要有鍵值和識別符號兩個值呢?

描述符是對於使用者操作而言的,讓使用者感覺操作和對檔案的操作相同,鍵是對於系統內部說的。

我們使用ftok來建立鍵值,具體你可以man一下fotk函式,大概是這樣的:按給定的路徑名取得其stat結構,從該結構中取出部分st_dev和st_ino欄位,然後再與專案id組合起來,如果兩個路徑名引用兩個不同的檔案,那麼,對這兩個路徑名呼叫ftok通常返回不同的鍵,但是,因為i節點號和鍵通常都存放在長整型中,於是建立鍵時可能會丟失資訊,這意味著,如果使用同一專案id,那麼對於不同檔案的兩個路徑名可能產生相同的鍵。而識別符號是唯一確定的,可以用來區別於其他ipc的。

fotk函式

系統建立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。

程序的狀態與識別符號

核心將所有程序存放在雙向迴圈鍊錶 程序鍊錶 中,鍊錶的節點都是task struct,稱為程序控制塊的結構。該結構包含了與乙個程序相關的所有資訊,如程序的狀態 程序的基本資訊 程序識別符號 記憶體相關資訊 父程序相關資訊 與程序相關的終端資訊 當前工作目錄 開啟的檔案資訊 所接收的訊號資訊等。下面將...

python的識別符號和關鍵字

識別符號 變數,模組名,函式名,類名 識別符號的命名規則與規範 規則 1.由數字,字母和 組成,不能以數字開頭 2.嚴格區分大小寫 共52個英文本元,大小寫是不一樣的 3.不能使用關鍵字 在python中有特殊含義的單詞,如true,if,print,for等 規範 建議遵守,顯得更加規範和專業 1...

Python的輸入,輸出和識別符號詳解

目錄 何為識別符號?識別符號是用來標識某個實體的乙個符號。在程式語言中,識別符號是計算機語言中作為名字的有效字串集合。識別符號是使用者程式設計時使用的名字,變數 常量 函式 語句塊也有名字,他們的名字成為識別符號。識別符號的注意事項 1.由數字 字母 下劃線組成,不能以數字開頭,如下 1 usern...