posix_memalign()
errno void **memptr
Указатель на переменную void*
free().size_t alignment
Требуемое выравнивание. Оно должно быть кратно sizeof(void*)
size_t size
Число выделяемых байтов.
memalign()
NULL в случае неудачи и запрошенному блоку памяти при успехе, причем boundary (степень двойки) обозначает выравнивание, a size — затребованный размер памяти.Традиционно выделенная memalign()
free(), поскольку memalign() использовала для выделения памяти malloc() и возвращала указатель на выровненный подходящим образом байт где-то внутри блока. Версия GLIBC не имеет этой проблемы. Из этих двух функций следует использовать posix_memalign(), если она у вас есть.14.2. Блокировка файлов
Современные системы Unix, включая GNU/Linux, дают вам возможность заблокировать часть файла или весь файл для чтения или записи. Подобно многим частям Unix API, которые были разработаны после V7, имеется несколько несовместимых способов осуществить блокировку файлов. Данный раздел рассматривает эти возможности.
14.2.1. Концепции блокировки файлов
Также, как замок на вашей двери предотвращает нежелательные проникновения в ваш дом,
Табл. 14.1 суммирует различные виды блокировок.
Таблица 14.1
. Функции блокировки файлов| Источник | Функция | Диапазон | Весь файл | Чтение/запись | Вспомогательный | Обязательный |
|---|---|---|---|---|---|---|
| BSD | flock() | √ | √ | √ | ||
| POSIX | fcntl() | √ | √ | √ | √ | √ |
| POSIX | lockf() | √ | √ | √ | √ | √ |
Имеются следующие аспекты блокировки файлов:
Блокировка записи является блокировкой части файла. Поскольку файлы Unix являются просто потоками байтов, было бы корректнее использовать термин
Блокировка всего файла, как предполагает название, блокирует весь файл, даже если его размер меняется в блокированном состоянии. Интерфейс BSD предусматривает блокирование лишь всего файла. Для блокирования всего файла с использованием интерфейса POSIX указывают нулевую длину. Это интерпретируется особым образом как «весь файл».
Блокировка чтения предотвращает запись в читаемую область. В файле может быть несколько заблокированных для чтения участков, даже в одной области файла, не мешающих друг другу, поскольку к данным осуществляется лишь доступ и они не изменяются.
Блокировка записи предоставляет исключительный доступ к записываемой области. Если эта область заблокирована также и для чтения, попытка получения блокировки записи либо блокируется, либо завершается неудачей в зависимости от запрошенного типа блокировки. После получения блокировки записи попытка получить блокировку чтения завершается неудачей.