POSIX メッセージ キューで名前の前に「/」を付ける必要がある特定の理由はありますか?
たとえば、「thequeue」という名前のメッセージ キューを開こうとしたとします。私は使用する必要があります:
mq_open("/thequeue", O_RDONLY);
POSIX メッセージ キューで名前の前に「/」を付ける必要がある特定の理由はありますか?
たとえば、「thequeue」という名前のメッセージ キューを開こうとしたとします。私は使用する必要があります:
mq_open("/thequeue", O_RDONLY);
メッセージキューだけでなく、セマフォや共有メモリを含むすべての POSIX IPC です。それを何かに帰する必要がある場合、それは通常のUnixの歴史的な実装の違いであり、この例では多かれ少なかれ失敗したものを統合したいというPOSIX自身の欲求によって悪化しています。
Richard Stevens は、 Unix Network Programming Vol IIでこれについて小さなセクションを割いています。私はおそらくこれらのページを何年にもわたって半ダース読みましたが、彼が言おうとしていることを十分に要約できるとはまだ思いません. 彼がはっきりしているのは、POSIX.1 が次のように述べていることです。
名前は、パス名の既存のルールに準拠する必要があります
名前がスラッシュで始まる場合、異なる呼び出しはすべて同じ IPC オブジェクトを参照します。name がスラッシュで始まらない場合、結果は実装定義になります。
名前にスラッシュを追加する実装は実装定義です。
sem_open
、mq_open
、およびallの現在の POSIX ドキュメントにはshm_open
、次の制限がリストされています。
名前がファイル システムに表示され、パス名を引数として取る他の関数から見えるかどうかは未指定です。
name 引数は、次の点を除いて、パス名の作成規則に従います。
a) 名前の先頭のスラッシュ文字以外のスラッシュ文字の解釈は実装定義です
b) name 引数の長さ制限は実装定義であり、パス名制限 PATH_MAX および NAME_MAX と同じである必要はありません
c) name がスラッシュ文字で始まる場合、name の同じ値でこれらの関数を呼び出すプロセスは、その名前が削除されていない限り、同じ IPC オブジェクトを参照するものとします。name がスラッシュ文字で始まらない場合、効果は実装定義です。
言い換えれば、物事はスティーブンスが説明したものとほぼ同じままです.
これらはすべて、(1) 名前をスラッシュで始める必要があること、(2) 名前に他のスラッシュを使用しないこと、または実装定義の領域に入る必要があることを、非常に長ったらしい言い方のように思われますが、満足のいくものではありません。