10. C言語/POSIX 共有メモリについて

 
10.1 能書き
10.2 POSIX 共有メモリに関する覚書

10.1 能書き

 UNIX 系のアプリケーションで、共有メモリを使用する際、長らく System V 系の共有メモリ操作関数
shmat
shmdt
 を使用してきたのですが、機会があって、初めて POSIX 系の共有メモリ操作関数
shm_open
shm_unlink
 を使用することとなりました。(今更と言わないで・・・)  で、System V 系の共有メモリ操作であれば ipcs コマンドで使用状況を見ることができるし、まんがいちプロセスがこけても ipcrm コマンドで消せるということで安心していたのですが・・・。  POSIX 系の共有メモリ操作の場合、どうやって外部から見るのだろうと悩んでいたら、下記のサイトを読んで合点がいきました

10.2 POSIX 共有メモリに関する覚書

 恥ずかしながら、初めて知りました。  shm_open で確保したメモリは、基本的に
/dev/shm
 に、ファイルとして取られるのですね。  最初にメモリを確保した時点では、0 バイトのファイルになっていて ftruncate でサイズを拡張した時点でそのサイズに変更されることがわかりました。  /dev/shmSticky ビットが立っているので、基本は作成したユーザでしか消せないようになっています。  共有メモリのネーミングで「スラッシュ (/) から始まるものにし、途中にはスラッシュを含まないように すべきである。」というルールも物理的には /dev/shm の下のファイルであるということがわかれば、きわめて納得できるものでした。