C言語 - POSIX 共有メモリについて

 クラウディア
1. 概要
2. POSIX 共有メモリに関する覚書

1. 概要

 UNIX 系のアプリケーションで、共有メモリを使用する際、長らく System V 系の共有メモリ操作関数

shmat
shmdt
 を使用してきたのですが、機会があって、初めて POSIX 系の共有メモリ操作関数

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

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

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