shmat サブルーチンによるコピー・オン・ライトのマップされたデータ・ファイルの作成

このセクションでは、shmat サブルーチンを使用して、コピー・オン・ライトのマップされたデータ・ファイルを作成する方法について説明します。

前提条件

マップするファイルは通常のファイルであること。

手順

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