shmat サブルーチンによるコピー・オン・ライトのマップされたデータ・ファイルの作成
このセクションでは、shmat サブルーチンを使用して、コピー・オン・ライトのマップされたデータ・ファイルを作成する方法について説明します。
前提条件
マップするファイルは通常のファイルであること。
手順
- ファイルをオープン (または作成) し、ファイル・ディスクリプターを保存する。
if( ( fildes = open( filename , 2 ) ) < 0 ) { printf( "cannot open file¥n" ); exit(1); }
- shmat サブルーチンで、
ファイルをコピー・オン・ライトとしてセグメントにマップする。
SHM_COPY 定数 は /usr/include/sys/shm.h ファイルに定義されています。 この定数は、ファイルがコピー・オン・ライトのマップ されたファイルであることを示します。 このヘッダー・ファイルおよびその他の共有メモリー・ヘッダー・ファイルを、 次のディレクティブで、プログラムに組み込みます。file_ptr = shmat( fildes, 0, SHM_COPY );
#include <sys/shm.h>
- file_ptr をデータ・ファイルの先頭を指す
ポインターとして使用し、データへのアクセスを、それがメモリー内にあるかのように行う。
while ( file_ptr < eof) { . . . (references to file using file_ptr) }
- fsync サブルーチンを
用いて変更をディスク上のファイルのコピーに書き込み、保存する。
fsync( fildes );
- プログラムがその処理を終了したら、ファイルをクローズする。
close( fildes );