Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 8 стр.

UptoLike

Составители: 

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