Опубликован: 06.12.2004 | Доступ: свободный | Студентов: 1096 / 126 | Оценка: 4.76 / 4.29 | Длительность: 20:58:00
ISBN: 978-5-9556-0021-5
Лекция 10:

Заключение

Технологические интерфейсы

Для работы с системным журналом стандарт 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.

Павел Храмцов
Павел Храмцов
Россия
Денис Комаров
Денис Комаров
Россия, Москва