Основы операционных систем. Практикум


         

Для перемещения по области памяти


Для перемещения по области памяти используем указатель tmpptr, так как указатель ptr на начало образа файла нам понадобится для прекращения иотображения вызовом munmap(). */ tmpptr = ptr; for(i = 1; i <=100000; i++){ tmpptr->f = i; tmpptr->f2 = tmpptr->f*tmpptr->f; tmpptr++; } /* Прекращаем отображать файл в память, записываем содержимое отображения на диск и освобождаем память. */ munmap((void *)ptr, length); return 0; }

Листинг 11.1. Программа 11-1.с для иллюстрации работы с memory mapped файлом.

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

Обратите внимание на необходимость увеличения размера файла перед его отображением. Созданный файл имеет нулевой размер, и если его с этим размером отобразить в память, то мы сможем записать в него или прочитать из него не более 0 байт, т.е. ничего. Для увеличения размера файла использован системный вызов ftruncate(), хотя это можно было бы сделать и любым другим способом.

При отображении файла мы вынуждены разрешить в нем и запись, и чтение, хотя реально совершаем только запись. Это сделано для того, чтобы избежать ошибки в операционной системе Linux, связанной с использованием 486-х и 586-х процессоров. Такой список разрешенных операций однозначно требует, чтобы при открытии файла системным вызовом open() файл открывался и на запись, и на чтение. Поскольку информацию мы желаем сохранить на диске, при отображении использовано значение флагов MAP_SHARED. Откомпилируйте эту программу и запустите ее.


Содержание  Назад  Вперед