ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 7
- 8
- 9
- 10
- 11
- …
- следующая ›
- последняя »