linux ftok()

1374 ワード

メッセージキュー、共有メモリなどのIPC通信を確立するには、ID値を指定する必要があります.通常、id値はftok関数によって得られる.
ftokのプロトタイプは以下の通りです.
 
Cコード
  • key_t ftok( char * fname, int id)  
  • key_t ftok( char * fname, int id)

     
    fnameはあなたが指定したファイル名で、idはサブシーケンス番号です.一般的なUNIX実装では,ファイルのインデックスノード番号を取り出し,前にサブシーケンス番号を付けてkey_を得る.tの戻り値.指定したファイルのインデックス・ノード番号が65538で、16進数に換算すると0 x 010002になり、指定したID値が38で、16進数に換算すると0 x 26になり、最後のkey_tは0 x 26010002を返します.
    ファイルインデックスノード番号をクエリーする方法は、ls-iが再構築ファイルを削除した後、インデックスノード番号はオペレーティングシステムが当時のファイルシステムの使用状況に応じて割り当てるため、従来とは異なるため、得られたインデックスノード番号も異なる.key_を確保するにはt値は変更されません.ftokのファイルが削除されないことを確認するか、ftokを使用しないか、固定key_を指定します.t値、例えば:
    Cコード
  • #define IPCKEY 0x111   
  •   
  • char path[256];   
  •   
  • sprintf( path, "%s/etc/config.ini", (char*)getenv("HOME") );   
  • msgid=ftok( path, IPCKEY );  
  • #define IPCKEY 0x111
    
    char path[256];
    
    sprintf( path, "%s/etc/config.ini", (char*)getenv("HOME") );
    msgid=ftok( path, IPCKEY );

     
    2つの異なるユーザの下の2つの同じプログラムのセットが互いに干渉しないIPCキー値を得ることを保証するための同じプログラム.etc/config.ini(仮定)はアプリケーションシステムの重要なプロファイルであるため、簡単に削除されるという問題はありません.削除されてもすぐに発見され、再構築されます(この場合、アプリケーションシステムも再起動されます).ftok()の設計目的もここにある.