ftok函式 應用,原理及 shell 指令碼實現

2021-09-30 03:13:54 字數 1647 閱讀 5748

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

ftok原型如下:

key_t ftok( char * fname, int id )

fname就時你指定的檔名,id是子序號。

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

下面是一段具體的**例子:

key_t keysharemem ;

if((keysharemem = ftok(afc_share_memory_name.c_str(), 0)) == -1) " 2>/dev/null`;   

str_st_dev=`stat --format='%d' "$" 2>/dev/null`;   

if [ "x$" = "x" -o "x$" = "x" ] ; then   

return 1;   

fi   

let st_ino=$   

let st_dev=$   

# 注意這裡的位操作運算子需要加轉義符

let key1=$/&16#ffff

let key2=$/&16#ff

let key2=$/

let key3=$/&16#ff

let key3=$/

let key=$/|$   

let key=$/|$   

}   

function echohelp()   

if [ $# -ne 2 ] ; then

echohelp   

fi   

spathname=$1   

let nprojectid=$2   

if [ "$" != "/" ] ; then   

spathname=$/$   

fi   

if ! test -f $ ; then   

echo "no file found![$]"   

exit 4   

fi   

ftok "$" "$"   

echo $

qsort函式解析 應用及底層原理

qsort函式可以對任意型別資料排序,標頭檔案為,其函式原型為 void qsort void base,size t num,size t width,int cdecl compare const void elem1,const void elem2 第乙個元素為所要排序資料的起始資料的位址,...

Python偏函式實現原理及應用

1.為什麼要使用偏函式 如果我們定義了乙個函式,比如說將四個數相加add one two,three,four 上層有很多函式需要呼叫這個函式。在這些呼叫中,80 的呼叫傳遞的引數都是one 1,two 20,如果我們每都輸入相同的引數,這樣乏味而且浪費,固然,我們可以通過預設引數來解決這個問題 但...

zookeeper原理及應用

zookeeper 分布式服務框架是 apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。具體簡介可以參照這篇文章。原理篇zookeeper的工作集群可以簡單分成兩類,乙個是leader...