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

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

前提条件

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

手順

マップされたデータ・ファイルの作成は 2 ステップの処理です。 まず、マップされたファイルを作成します。 次に、shmat サブルーチンには、 マップされたファイルの終わりを検出す るメソッドが備わっていないので、それをプログラミングする必要があります。

  1. マップされたデータ・ファイルを作成する。
    1. ファイルをオープン (または作成) し、ファイル・ディスクリプターを保存する。
      
      if( ( fildes = open( filename , 2 ) ) < 0 )
      {
              printf( "cannot open file¥n" );
              exit(1);
      }
    2. shmat サブルーチンで、 ファイルをセグメントにマップする。
      
      file_ptr=shmat (fildes, 0, SHM_MAP);
      SHM_MAP 定数 は /usr/include/sys/shm.h ファイルに定義されています。 この定数は、ファイルが、マップされたファイルであることを示します。 このファイルおよびその他の共有メモリー・ヘッダー・ファイルを、 次のディレクティブで、プログラムに組み込みます。
      #include <sys/shm.h>
  2. マップされたファイルの終わりを検出する。
    1. lseek サブルーチンを用いて、ファイルの終わりに進む。
      
      eof = file_ptr + lseek(fildes, 0, 2);
      この例は、eof の値を、ファイルの終わりを 1 バイト超えたアドレス に設定します。 プログラムでは、この値をファイル終了マーカーとして使用します。
    2. file_ptr をデータ・ファイルの先頭を指す ポインターとして使用し、データへのアクセスを、それがメモリー内にあるかのように行う。
      
      while ( file_ptr < eof)
      {
            .
            .
            .
            (references to file using file_ptr)
      }

      注: read および write サブルーチン も、マップされたファイルを処理し、ポインターを使用してデータに アクセスするときと同じデータを作成します。

    3. プログラムがその処理を終了したら、ファイルをクローズする。
      
      close (fildes );