私はWindowsからLinuxへのいくつかのアプリのポートに必要な、彼らは、共有メモリとセマフォを使用しています。私は、CreateFileMapping/OpenFileMappingやCreateSemaphore/OpenSemaphoreなどのWinddows関数を置き換える必要があります。私は後でセマフォーと共有メモリーのための共通インターフェースを書きます。 WindowsではUnix IPCリソースを自動的に削除するには?
すべてのハンドルが閉じられたときに、リソース(セマフォまたは共有メモリ)は、システムによって削除されます。しかし、Unixでは、shm_unlink(共有メモリはshm_openでオープン)とsem_unlink(sem_openでオープンしたセマフォ)でリソースを削除する必要があります。 shm_openはディスク上に実際のファイルを作成しないので良いです。それは代わりに、文字列の識別子として数を必要とするため
私はたshmgetを使用することはできません。 ftokは、衝突を生成する可能性があるため、まったく役に立たない。
新しいプロセスがそれを必要としませんとき、それはわからない、とプロセスがクラッシュしたり、手動でユーザーによって殺される可能性があるため、すべてのハンドルが閉じられて前に私は* _unlinkを呼び出すことはできません。
これらのリンクを解除してもシステムにゴミが残ってしまい、プロセスグループを再開すると、リソースが他のプロセスで使用されているか古いか(リンクされていないユーザーがプロセスを強制終了した、またはプロセスがクラッシュした)