Книга: Linux программирование в примерах
14.5. Резюме
14.5. Резюме
• Иногда бывает необходимо выделить память, выровненную по определенной границе. Это осуществляет posix_memalign()
. Ее возвращаемое значение отличается от большинства из рассмотренных в данной книге функций. memalign()
также выделяет выровненную память, но не все системы поддерживают освобождение памяти с помощью free()
.
• Блокирование файлов с помощью fcntl()
предусматривает блокировку диапазонов, вплоть до блокирования отдельных байтов в файле. Блокировки чтения предотвращают запись в заблокированную область, а блокировки записи предотвращают чтение и запись другими процессами в заблокированную область. По умолчанию используется вспомогательная блокировка, и POSIX стандартизует лишь вспомогательную блокировку. Большинство современных систем Unix поддерживают обязательную блокировку, используя для файла бит setgid прав доступа, а также возможные дополнительные опции монтирования файловой системы.
• GNU/Linux функция lockf()
действует в качестве оболочки вокруг блокировки POSIX с помощью fcntl()
; блокировки функции BSD flock()
совершенно независимы от блокировок fcntl()
. Блокировки BSD flock()
используются лишь для всего файла в целом и не работают на удаленных файловых системах. По этим причинам использование блокировки flock()
не рекомендуется.
• gettimeofday
() получает время дня в виде пар (секунды, микросекунды) в struct timeval
. Эти значения используются utimes()
для обновления времени доступа и модификации файла. Системные вызовы gettimer()
и settimer()
используют пары struct timeva
l в struct itimerval
для создания интервальных таймеров — сигнальных часов, которые «срабатывают» в установленное время и продолжают срабатывать впоследствии с заданным интервалом. Три различных таймера обеспечивают контроль тех состояний, когда таймер продолжает действовать.
• Функция nanosleep()
использует struct timespec
, которая указывает время в секундах и наносекундах, чтобы приостановить выполнение процесса в течение определенного интервала времени. У нее есть удачная особенность не взаимодействовать вообще с механизмами сигналов.
• Три API являются стандартным набором функций для хранения и поиска данных, которые сохраняют данные в двоичных деревьях в отсортированном виде. Эти три API очень гибкие, позволяя использовать множество деревьев и произвольные данные.