Мобильное программирование приложений реального времени в стандарте POSIX

       

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


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


Содержание раздела