ВУЗ:
Составители:
8
MAP_SHARED Означает, что данные, измененные в памяти будут
немедленно записаны в файл на диске. Такое отображение
называется разделяемым;
MAP_FIXED Указывает системе на использование точного адреса,
передаваемого в ADDRESS и возвращать ошибку, если
выполнить это невозможно;
MAP_ANONYMOUS
MAP_ANON
Создает анонимное отображение, не соединенное ни с каким
файлом. Анонимные отображения используются на
некоторых системах для расширения размера области памяти,
используемой для динамических переменных, могут
использоваться также для передачи данных между
приложениями без создания файла. В Linux функция
выделения динамической памяти автоматически использует
mmap.
Флаги MAP_PRIVATE и MAP_SHARED не могут использоваться
одновременно.
Функция возвращает адрес буфера отображения в случае успешного
выполнения и –1 в случае ошибки. Переменная errno может принимать следующие
значения:
EINVAL Либо ADDRESS не может быть использован либо заданы
недопустимые значения FLAGS;
EACCES Файл FILEDES не был открыт для доступа, заданного в PROTECT;
ENOMEM Недостаточно памяти для выполнения операции или процесс имеет
недостаточно памяти;
ENODEV Файл имеет тип, не поддерживающий отображения;
ENOEXEC Файл расположен в файловой системе, не поддерживающей
отображения.
int munmap (void *ADDR, size_t LENGTH)
Функция удаляет все отображения, расположенные в участках памяти от ADDR
до (ADDR+LENGTH). Аргумент LENGTH должен в точности соответствовать длине
буфера отображения.
Безопасным является удаление нескольких отображений одной командой,
включение в область памяти, не являющейся отображением или удаление только части
отображения. Тем не менее, удалены будут только целые страницы памяти.
В случае успешного выполнения функция возвращает 0, а в случае ошибки
возвращается –1. Возможен единственный код ошибки:
EINVAL Заданная область памяти не является отображением или не
выровнена на страницу.
int msync (void *ADDRESS, size_t LENGTH, int FLAGS)
При использовании разделяемых отображений, ядро операционной системы
может записать в файл в любой момент. Чтобы удостоверится в том, что данные в
памяти соответствуют данным на диске, используется эта функция. Она работает с
областью памяти, задаваемой адресами ADDRESS и (ADDRESS+LENGTH). Функция
может использоваться с одиночным отображением или с множественными
отображениями. Участок памяти, не относящийся к отображению в этом случае задать
нельзя.
Аргумент FLAGS может принимать следующие значения:
MS_SYNC Говорит о необходимости удостовериться в том, что данные в
памяти соответствуют данным на диске;
MS_ASYNC Говорит о необходимости начать процесс синхронизации, однако не
MAP_SHARED Означает, что данные, измененные в памяти будут немедленно записаны в файл на диске. Такое отображение называется разделяемым; MAP_FIXED Указывает системе на использование точного адреса, передаваемого в ADDRESS и возвращать ошибку, если выполнить это невозможно; MAP_ANONYMOUS Создает анонимное отображение, не соединенное ни с каким MAP_ANON файлом. Анонимные отображения используются на некоторых системах для расширения размера области памяти, используемой для динамических переменных, могут использоваться также для передачи данных между приложениями без создания файла. В Linux функция выделения динамической памяти автоматически использует mmap. Флаги MAP_PRIVATE и MAP_SHARED не могут использоваться одновременно. Функция возвращает адрес буфера отображения в случае успешного выполнения и –1 в случае ошибки. Переменная errno может принимать следующие значения: EINVAL Либо ADDRESS не может быть использован либо заданы недопустимые значения FLAGS; EACCES Файл FILEDES не был открыт для доступа, заданного в PROTECT; ENOMEM Недостаточно памяти для выполнения операции или процесс имеет недостаточно памяти; ENODEV Файл имеет тип, не поддерживающий отображения; ENOEXEC Файл расположен в файловой системе, не поддерживающей отображения. int munmap (void *ADDR, size_t LENGTH) Функция удаляет все отображения, расположенные в участках памяти от ADDR до (ADDR+LENGTH). Аргумент LENGTH должен в точности соответствовать длине буфера отображения. Безопасным является удаление нескольких отображений одной командой, включение в область памяти, не являющейся отображением или удаление только части отображения. Тем не менее, удалены будут только целые страницы памяти. В случае успешного выполнения функция возвращает 0, а в случае ошибки возвращается –1. Возможен единственный код ошибки: EINVAL Заданная область памяти не является отображением или не выровнена на страницу. int msync (void *ADDRESS, size_t LENGTH, int FLAGS) При использовании разделяемых отображений, ядро операционной системы может записать в файл в любой момент. Чтобы удостоверится в том, что данные в памяти соответствуют данным на диске, используется эта функция. Она работает с областью памяти, задаваемой адресами ADDRESS и (ADDRESS+LENGTH). Функция может использоваться с одиночным отображением или с множественными отображениями. Участок памяти, не относящийся к отображению в этом случае задать нельзя. Аргумент FLAGS может принимать следующие значения: MS_SYNC Говорит о необходимости удостовериться в том, что данные в памяти соответствуют данным на диске; MS_ASYNC Говорит о необходимости начать процесс синхронизации, однако не 8
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »