使用 shmat 子例程来创建写入时复制映射数据文件

此部分描述如何使用 shmat 子例程创建写入时复制映射数据文件。

先决条件

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

PROCEDURE

  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 );