Создание отображенных файлов данных с помощью функции shmat
В этом разделе приведены инструкции по созданию отображенного файла с помощью функции shmat.
Предварительные требования
Отображаемый файл должен быть обычным файлом.
Процедура
Создание отображенного файла - процесс, состоящий из двух этапов. Сначала нужно создать отображенный файл. Затем необходимо разработать метод определения конца файла, так как процедура shmat не поддерживает эту функцию.
- Для создания отображенного файла:
- Откройте (или создайте) файл и сохраните его дескриптор:
if( ( fildes = open( filename , 2 ) ) < 0 ) { printf( "не удалось открыть файл\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) { . . . (работа с файлом через указатель file_ptr) }Примечание: Процедуры read и write могут работать с отображенными файлами, при этом будут получены те же результаты, что и при работе через указатели.
- Закройте файл, когда программа завершит работу с ним:
close (fildes );
- С помощью функции lseek перейдите в конец файла: