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」の下のファイルであるということがわかれば、きわめて納得できるものでした。