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

UptoLike

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

9
дожидается его окончания;
Функция возвращает 0 в случае успешного выполнения и –1 в случае ошибки.
Переменная errno может принимать следующие значения:
EINVAL Была заданы недопустимая область памяти или значения флагов;
EFAULT Нет существующего отображения по крайней мере в части
задаваемой области памяти.
void * mremap (void *ADDRESS, size_t LENGTH, size_t NEW_LENGTH, int
FLAG)
Функция используется для изменения размера существующей области памяти.
Аргументы ADDRESS и LENGTH должны в точности задавать используемую в
настоящий момент область памяти. Будет возвращена область отображения с теми же
характеристиками, но с размером NEW_LENGTH. Аргумент FLAG может принимать
единственное значение MREMAP_MAYMOVE, которое означает, что операционная
система может уничтожить существующее отображение и создать новое требуемой
длины, однако имеющий новый адрес.
В случае успешного выполнения функция возвращает адрес буфера
отображения, в случае возникновения ошибки возвращается –1. Переменная errno
может принимать одно из следующих значений:
EFAULT Отсутствует область отображения по крайней мере в части
задаваемого буфера или участок памяти содержит более одного
буфера отображения;
EINVAL Адрес памяти не выровнен или недопустим;
EAGAIN Участок памяти имеет захваченные участки и при расширении
области, ограничение на захваченные страницы для данного будет
превышено;
ENOMEM Участок памяти является частным и открытым на запись и
недостаточно виртуальной памяти для его расширения.
Не все файловые дескрипторы могут быть отображены в память. Гнезда,
каналы и большинство устройств позволяют получить только последовательный доступ
к данным. Некоторые обыкновенные файлы также не могут быть отображены в память,
устаревшие ядра операционных систем могут не поддерживать отображение.
Синхронизация операций ввода-вывода
В большинстве современных операционных систем обычные операции
ввода/вывода не выполняются синхронно. Например, если даже операция write
выполнилась нормально, это еще не означает, что данные фактически были записаны на
носитель информации, например, жесткий диск.
В ситуациях, когда необходима синхронизация выполняемых процессов,
пользователь может использовать специальные функции, гарантирующие, что все
операции ввода/вывода были завершены.
int sync (void)
После вызова этой функции, она не возвращает управление в программу до тех
пор, пока все данные не будут записаны на устройство. Прототип функции находится в
заголовочном файле <unistd.h>. Функция возвращает значение 0 при отсутствии
ошибок.
Гораздо чаще возникает ситуация, когда нет необходимости в синхронизации
операций ввода/вывода всей операционной системы. Программе необходимо лишь
удостовериться, что для данного файла все операции завершены.
int fsync (int FILDES)
                 дожидается его окончания;
       Функция возвращает 0 в случае успешного выполнения и –1 в случае ошибки.
Переменная errno может принимать следующие значения:
EINVAL           Была заданы недопустимая область памяти или значения флагов;
EFAULT           Нет существующего отображения по крайней мере в части
                 задаваемой области памяти.
        void * mremap (void *ADDRESS, size_t LENGTH, size_t NEW_LENGTH, int
FLAG)
        Функция используется для изменения размера существующей области памяти.
Аргументы ADDRESS и LENGTH должны в точности задавать используемую в
настоящий момент область памяти. Будет возвращена область отображения с теми же
характеристиками, но с размером NEW_LENGTH. Аргумент FLAG может принимать
единственное значение MREMAP_MAYMOVE, которое означает, что операционная
система может уничтожить существующее отображение и создать новое требуемой
длины, однако имеющий новый адрес.
        В случае успешного выполнения функция возвращает адрес буфера
отображения, в случае возникновения ошибки возвращается –1. Переменная errno
может принимать одно из следующих значений:
EFAULT           Отсутствует область отображения по крайней мере в части
                 задаваемого буфера или участок памяти содержит более одного
                 буфера отображения;
EINVAL           Адрес памяти не выровнен или недопустим;
EAGAIN           Участок памяти имеет захваченные участки и при расширении
                 области, ограничение на захваченные страницы для данного будет
                 превышено;
ENOMEM           Участок памяти является частным и открытым на запись и
                 недостаточно виртуальной памяти для его расширения.
        Не все файловые дескрипторы могут быть отображены в память. Гнезда,
каналы и большинство устройств позволяют получить только последовательный доступ
к данным. Некоторые обыкновенные файлы также не могут быть отображены в память,
устаревшие ядра операционных систем могут не поддерживать отображение.

        Синхронизация операций ввода-вывода
        В большинстве современных операционных систем обычные операции
ввода/вывода не выполняются синхронно. Например, если даже операция write
выполнилась нормально, это еще не означает, что данные фактически были записаны на
носитель информации, например, жесткий диск.
        В ситуациях, когда необходима синхронизация выполняемых процессов,
пользователь может использовать специальные функции, гарантирующие, что все
операции ввода/вывода были завершены.
        int sync (void)
        После вызова этой функции, она не возвращает управление в программу до тех
пор, пока все данные не будут записаны на устройство. Прототип функции находится в
заголовочном файле . Функция возвращает значение 0 при отсутствии
ошибок.
        Гораздо чаще возникает ситуация, когда нет необходимости в синхронизации
операций ввода/вывода всей операционной системы. Программе необходимо лишь
удостовериться, что для данного файла все операции завершены.
        int fsync (int FILDES)




                                                                                9