Linuxシステムコール、共有メモリの使い方
UNIX / Linux システムコール・プログラミング プロセス間通信(IPC)、共有メモリ 共有メモリとは? カーネルが管理するメモリ空間をユーザープロセスに ”見えるようにする” ことで、複数のプロセス間で同じメモリ空間を利用することができます。 プロセスからは通常のメモリと同様に見えるため、同じエリアに対しての同時書き込みなどについては、排他制御を行う、あるいはアトミックな操作とするなどの対応が必要になります。 共有メモリは SYSTEM V IPC です。 それでは、早速サンプルコードについて解説します。 今回のコードは2つのプログラムで構成されています。 shm_r.c 共有メモリは、shmget()システムコールにより共有メモリを取得します。このときの引数の指定で”ない場合は作成する”、パーミッションを与えるなどの指定を行います。生成された共有メモリにアクセスするため、shmat()システムコールでポインタを得るます。 以降、このプロセスはshmat()システムコールで得たポインタを通じ、自由に共有メモリにアクセスすることができます。 この、サンプルshm_r.cは、共有メモリを生成・アタッチすると1秒毎にメモリの更新をチェックし、更新された場合は内容を表示します。このときの更新内容が "Quit"であった場合、共有メモリをデタッチし、共有メモリを破棄します。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> #define DATA_SIZE 2048 int main(void) { int id; char *shmData; char data[DATA_SIZE]; // Shared memory create a new with IPC_CREATE if((id = shmget(IPC_PRIVATE, DA...