使用 shmat 子例程来创建映射数据文件

此部分描述如何使用 shmat 子例程来创建映射数据文件。

先决条件

要映射的文件是常规文件。

PROCEDURE

映射数据文件的创建过程有两步。 首先创建映射文件。 然后,必须编写一个检测映射文件末尾的方法,因为 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)
      }

      注:readwrite 子例程也影响映射文件,并产生与使用指针存取数据时相同的数据。

    3. 在程序处理完该文件时将其关闭:
      close (fildes );