Создание отображенных файлов данных с помощью функции shmat

В этом разделе приведены инструкции по созданию отображенного файла с помощью функции shmat.

Предварительные требования

Отображаемый файл должен быть обычным файлом.

Процедура

Создание отображенного файла - процесс, состоящий из двух этапов. Сначала нужно создать отображенный файл. Затем необходимо разработать метод определения конца файла, так как процедура shmat не поддерживает эту функцию.

  1. Для создания отображенного файла:
    1. Откройте (или создайте) файл и сохраните его дескриптор:
      
      if( ( fildes = open( filename , 2 ) ) < 0 )
      {
              printf( "не удалось открыть файл\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)
      {
            .
            .
            .
            (работа с файлом через указатель file_ptr)
      }

      Примечание: Процедуры read и write могут работать с отображенными файлами, при этом будут получены те же результаты, что и при работе через указатели.

    3. Закройте файл, когда программа завершит работу с ним:
      
      close (fildes );