Заключение
Технологические интерфейсы
Для работы с системным журналом стандарт 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.