トップページへ

shmgetの"0x1b6"の意味

小粋空間 » Linux » shmgetの"0x1b6"の意味

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進数表記の値はそれぞれ下記のとおりです。

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」というパーミッションの設定を行っているということですね。

« 前の記事へ

次の記事へ »

トップページへ