shmat サブルーチンによるマップされたデータ・ファイルの作成
このセクションでは、shmat サブルーチンを使用して、マップされたデータ・ファイルを作成する方法について説明します。
前提条件
マップするファイルは通常のファイルであること。
PROCEDURE
マップされたデータ・ファイルの作成は 2 ステップの処理です。 まず、マップされたファイルを作成します。 次に、shmat サブルーチンには、 マップされたファイルの終わりを検出す るメソッドが備わっていないので、それをプログラミングする必要があります。
- マップされたデータ・ファイルを作成する。
- ファイルをオープン (または作成) し、ファイル・ディスクリプターを保存する。
if( ( fildes = open( filename , 2 ) ) < 0 ) { printf( "cannot open file\n" ); exit(1); } - shmat サブルーチンで、
ファイルをセグメントにマップする。
このSHM_MAP定数は、 /usr/include/sys/shm.h ファイルに定義されます。 この定数は、ファイルが、マップされたファイルであることを示します。 このファイルおよびその他の共有メモリー・ヘッダー・ファイルを、 次のディレクティブで、プログラムに組み込みます。file_ptr=shmat (fildes, 0, SHM_MAP);#include <sys/shm.h>
- ファイルをオープン (または作成) し、ファイル・ディスクリプターを保存する。
- マップされたファイルの終わりを検出する。
- lseek サブルーチンを用いて、ファイルの終わりに進む。
この例では、以下の値を設定します。eofファイルの終わりを 1 バイト超えるアドレスに変更することができます。 プログラムでは、この値をファイル終了マーカーとして使用します。eof = file_ptr + lseek(fildes, 0, 2); - 使用file_ptrデータ・ファイルの先頭を指すポインターとして使用し、メモリー内にあるかのようにデータにアクセスします。
while ( file_ptr < eof) { . . . (references to file using file_ptr) }注: read および write サブルーチン も、マップされたファイルを処理し、ポインターを使用してデータに アクセスするときと同じデータを作成します。
- プログラムがその処理を終了したら、ファイルをクローズする。
close (fildes );
- lseek サブルーチンを用いて、ファイルの終わりに進む。