#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
void *shmat(int shmid, void *shmaddr, int shmflg);
int shmdt(void *shmaddr);
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmget() は共有メモリ作成
shmat() は共有メモリに読み書き許可を与える(アタッチする)
参考サイト:
*http://www.gadgety.net/shin/tips/unix/ipc/shared.html
手順:
●共有メモリを準備プロセス(アクセスもする)
shmget(): 共有メモリ作成
shmat() : 読み書き許可をアッタチ
読み書きを行い
shmdt() : 共有メモリを分離する
shmctl(): 共有メモリを破棄
●共有メモリにアクセスするプロセス
必要であれば ftok() : キーを生成 (fork()を使用して,子プロセスはいらない)
shmget() : 生成したキーから共有メモリのidを取得
shmat() : 読み書き許可をアタッチ
shmdt() : 共有メモリを分離
終わり
■ セマフォいろいろ
- key_t ftok(const char *pathname, int proj_id)
プロセス間通信のとき,たとえば共有メモリを使用するときとか,セマフォを使用するとき,IDを使用してアクセスするが,共通するリソースを使用したいときはプロセス(複数)みんな同じIDを使用しないとアクセスできない.この関数の引数はプロセス間の一つのプロトコルみたいなもので,みんな前もって同じpathnameとproj_idを使用してキーを生成すると決めれば,同じキーを使用することができ,共有リソースにアクセスすることができる.
参考サイト:
* http://d.hatena.ne.jp/s-kita/20080710/1215696366
* http://www.gadgety.net/shin/tips/unix/ipc/semaphore.html
■ --
■ --
■ --
No comments:
Post a Comment