Технологические интерфейсы
Для работы с системным журналом стандарт POSIX-2001 предлагает функции записи сообщений (syslog()), установки фильтра (маски журналируемых сообщений, setlogmask()) и других параметров журналирования (openlog()) и, наконец, завершения работы с системным журналом (closelog()).
У журналируемых сообщений имеются такие атрибуты, как уровень серьезности и источник.
К этой же прикладной области можно отнести служебную программу logger и функцию fmtmsg().
Стандартом POSIX-2001 предусмотрен набор функций для работы с базой данных учетной информации о пользователях. Эти функции реализуют последовательный просмотр учетных записей (getutxent()), поиск в базе (getutxid(), getutxline()), модификацию или добавление записей (pututxline()), возврат к началу (setutxent()) и завершение работы с базой (endutxent()).
Универсальный характер носят функции для работы с простыми базами данных. Подобную базу можно открыть (dbm_open()) и закрыть (dbm_close()), выбрать (dbm_fetch()), сохранить (dbm_store()) и удалить (dbm_delete()) запись по ключу, перебрать имеющиеся в базе ключи (dbm_firstkey(), dbm_nextkey()), опросить статус ошибки (dbm_error()) и очистить его (dbm_clearerr()).
Важный подкласс технологических интерфейсов образуют средства поиска и сортировки.
Бинарный поиск представлен функцией bsearch(), последовательный – функциями lsearch() (поиск с вставкой) и lfind(). Управление хэш-таблицами осуществляется посредством функций hcreate(), hdestroy() и hsearch(). Бинарные деревья поиска обслуживаются функциями tsearch() (поиск с вставкой), tfind(), tdelete() и twalk() (обход деревьев).
Для сортировки массивов целесообразно пользоваться функцией qsort(). Существует также служебная программа tsort.
Функции insque() и remque() реализуют вставку и удаление элементов очереди.
Согласно стандарту POSIX-2001, пользовательский контекст потока управления включает содержимое машинных регистров, маску сигналов и текущий стек выполнения. Стандарт предоставляет функции для опроса (getcontext()), модификации (makecontext()) и смены (setcontext() и swapcontext()) пользовательских контекстов.
Рассматриваемая в стандарте POSIX- 2001 среда вещественной арифметики включает сущности двух видов: флаги состояния и управляющие режимы.
Если приложение проверяет флаги состояния, устанавливает собственные управляющие режимы или выполняется в режимах, отличных от подразумеваемого, то при компиляции необходимо воспользоваться управляющим комментарием (#pragma) FENV_ACCESS:
#pragma STDC FENV_ACCESS ON
Опросить и установить текущую среду вещественной арифметики можно с помощью функций fegetenv() и fesetenv().
Сохранение текущей среды может сочетаться с ее изменением. Функция feholdexcept() очищает флаги состояния и устанавливает "безостановочный" режим, а feupdateenv() сохраняет в своей локальной памяти информацию о текущей исключительной ситуации, устанавливает новую среду и затем пытается возбудить в ней сохраненное исключение.
Для опроса и установки флагов состояния стандартом POSIX-2001 предусмотрены функции fegetexceptflag() и fesetexceptflag().
Функции fetestexcept(), feclearexcept() и feraiseexcept() служат, соответственно, для проверки, сброса и возбуждения исключительных ситуаций.
Опросить и установить режим округления можно с помощью функций fegetround() и fesetround().
Обход файловой иерархии – типовая задача, для решения которой стандартом POSIX-2001 предлагаются две сходные функции – ftw() и nftw().
Служебная программа xargs дает возможность формировать и выполнять командные строки, объединяя зафиксированный набор начальных аргументов с аргументами, прочитанными со стандартного ввода.
В качестве последнего элемента технологических интерфейсов рассматриваются функции для работы с псевдотерминалами.
В стандарте POSIX-2001 выстроена пятиэтапная модель получения доступа к псевдотерминалу:
- открытие главного устройства псевдотерминала, получение его файлового дескриптора (осуществляется функцией posix_openpt());
- разблокирование подчиненного устройства псевдотерминала (функция unlockpt());
- формирование прав доступа к подчиненному устройству псевдотерминала (grantpt());
- получение имени подчиненного устройства псевдотерминала (ptsname());
- открытие подчиненного устройства псевдотерминала, получение его файлового дескриптора (open()).
На этом мы завершаем описание средств программирования приложений в стандарте POSIX.