使用 shmat 子例程来创建写入时复制映射数据文件
此部分描述如何使用 shmat 子例程创建写入时复制映射数据文件。
先决条件
要映射的文件是常规文件。
PROCEDURE
- 打开(或创建)该文件并保存文件描述符:
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 );