shmgetの"0x1b6"の意味

shmgetの"0x1b6"の意味

Posted at June 16,2017 12:03 AM
Tag:[Linux]

shmgetの"0x1b6"の意味について調べてみました。

1.はじめに

Linuxには、共有メモリーセグメントを割り当てるshmget()というシステムコールがあります。

shmid = shmget(key, sizeof(pthread_mutex_t), IPC_CREAT | IPC_EXCL | 0x1b6);

こういうサンプルをみかけるのですが、第3パラメータにある"0x1b6"の意味が分かりません。

ということで、shmgetの"0x1b6"の意味について調べてみました。

2."0x1b6"の意味

manコマンドによると、shmgetの第3パラメータはshmflgといい、動作を決めるための各フラグを設定します。

上記のサンプルにある、IPC_CREATとIPC_EXCLの意味は次のとおりです。

IPC_CREAT

新しいセグメントを作成する。このフラグが指定されなかった場合、 shmget() は key に対応するセグメントを探し、 ユーザーがそのセグメントにアクセスする許可があるかどうかをチェックする。

IPC_EXCL

このフラグは IPC_CREAT とともに使用し、 この呼び出しで確実にセグメントが作成されるようにする。 セグメントが既に存在した場合には、 呼び出しは失敗する。

この2つの値はOR条件で組み合わせられます。ちなみに16進数表記の値はそれぞれ下記のとおりです。

  • IPC_CREAT:0x200
  • IPC_EXCL:0x400

manの説明は、次のように続いています。

上記のフラグに加えて、 shmflg の下位 9 ビットは、所有者、グループ、その他への許可を指定する。 これらのビットは open(2) の mode 引き数と同じ形式で同じ意味を持つ。 今のところ、システムは実行 (execute) 許可を参照しない。

「下位 9 ビット」がどうやら"0x1b6"を指すようです。

"0x1b6"を2進数に分解すると、0001 1011 0110になります(下位9bitなので上位3bitの"000"は無視)。

下位9bitを3ビットずつ区切ると、110 110 110になります。

10進数に直すと「666」になり、これでパーミッションの指定を行っているようです。

つまり"0x1b6"は「666」というパーミッションの設定を行っているということですね。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)