shmat サブルーチンによるマップされたデータ・ファイルの作成
このセクションでは、shmat サブルーチンを使用して、マップされたデータ・ファイルを作成する方法について説明します。
前提条件
マップするファイルは通常のファイルであること。
手順
マップされたデータ・ファイルの作成は 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 サブルーチンを用いて、ファイルの終わりに進む。