0

このコードを考えると:

char * pathname; // some string 
int returnValue = shm_open(pathname, O_CREAT | O_TRUNC | O_RDWR, mode);  // create a shared memory object 

これを行う場合: 注 - 同じパス名!)

int returnValue2 = shm_open(pathname, O_CREAT | O_TRUNC | O_RDWR, mode);  // create a shared memory object 

エラーは発生せず、戻り値は問題ありません ( 0)。

共有メモリ セグメント/オブジェクトを再作成しているということですか?

4

2 に答える 2

2

shm_open() マニュアルページからの引用:

戻り値:成功するとshm_open()、非負のファイル記述子を返します。失敗すると、shm_open()-1を返します。

これに基づいて、既存の共有メモリオブジェクトを作成して開いた、または開いたと言えます。

于 2012-07-30T17:29:56.947 に答える
2

既存の共有メモリセグメントを再度開くだけです。

O_CREAT

共有メモリオブジェクトが存在しない場合は作成します。(...)

O_EXCL

O_CREATも指定されていて、指定された名前の共有メモリオブジェクトがすでに存在する場合は、エラーを返します。

(Linuxのman shm_openから。)

さらに、POSIXから(もう少し明確に):

O_CREAT

共有メモリオブジェクトが存在する場合、以下のO_EXCLに記載されている場合を除き、このフラグは効果がありません。それ以外の場合は、共有メモリオブジェクトが作成されます。(...)

于 2012-07-30T17:30:06.070 に答える