使用 shmat 子例程来创建映射数据文件
此部分描述如何使用 shmat 子例程来创建映射数据文件。
先决条件
要映射的文件是常规文件。
PROCEDURE
映射数据文件的创建过程有两步。 首先创建映射文件。 然后,必须编写一个检测映射文件末尾的方法,因为 shmat 子例程没有提供。
- 要创建映射数据文件:
- 打开(或创建)该文件并保存文件描述符:
if( ( fildes = open( filename , 2 ) ) < 0 ) { printf( "cannot open file\n" ); exit(1); } - 用 shmat 子例程将文件映射到段:
该SHM_MAP在 /usr/include/sys/shm.h 文件中定义了常量。 此常量表示该文件是映射文件。 用以下伪指令以在程序中包含该文件和其他共享内存头文件:file_ptr=shmat (fildes, 0, SHM_MAP);#include <sys/shm.h>
- 打开(或创建)该文件并保存文件描述符:
- 要检测映射文件的末尾:
- 使用 lseek 子例程转到文件的末尾:
此示例设置以下项的值:eof到超出文件末尾的 1 字节的地址。 在程序中使用该值作为文件末尾的标记。eof = file_ptr + lseek(fildes, 0, 2); - 使用file_ptr作为指向数据文件开头的指针,并访问数据,如同它在内存中一样:
while ( file_ptr < eof) { . . . (references to file using file_ptr) }注:read 和 write 子例程也影响映射文件,并产生与使用指针存取数据时相同的数据。
- 在程序处理完该文件时将其关闭:
close (fildes );
- 使用 lseek 子例程转到文件的末尾: