В настояшей публикации, дополняющий монографии [1] и [2], рассматриваются изменения, производенные в стандарте на мобильный интерфейс операционной системы (POSIX) в редакции от 2008 года, именуемой далее POSIX.1-2008 [3]. Эти изменения можно разделить на следующие группы:
В свою очередь, при изменении статуса функций и символов он может как повыситься (функции и символы переводятся в разряд обязательных), так и понизиться (что осуществляется путем перевода функций и символов в разряд устаревших).
Ниже приведен список функций и символов, присутствовавших в более ранних версиях стандарта POSIX, но удаленных из POSIX.1-2008:
bcmp() сравнение областей памяти;bcopy() копирование области памяти;bsd_signal() упрощенная работа с сигналами;bzero() обнуление области памяти;ecvt() преобразование вещественного числа в цепочку символов;fcvt() преобразование вещественного числа в цепочку символов;ftime() опрос текущих даты и времени;gcvt() преобразование вещественного числа в цепочку символов;getcontext() опрос текущего gethostbyaddr() gethostbyname() getwd() опрос абсолютного маршрутного имени текущего каталога;h_errno код ошибки, возвращенный сетевой базой данных;index() поиск первого вхождения символа в цепочке символов;makecontext() модификация mktemp() генерация уникального имени файла;pthread_attr_getstackaddr() опрос pthread_attr_setstackaddr() установка rindex() поиск последнего вхождения символа в цепочке символов;scalb() опрос показателя вещественного числа в машинной системе счисления;setcontext() установка текущего swapcontext() перестановка ualarm() установка usleep() vfork() создание нового процесса с разделением виртуальной памяти;wcswcs() поиск Следующие функции и символы в стандарте POSIX.1-2008 переведены в разряд устаревших:
_longjmp() _setjmp() установка для _tolower() приведение к строчным буквам;_toupper() приведение к прописным буквам;asctime() преобразование даты и времени в цепочку символов;asctime_r() преобразование даты и времени в цепочку символов;ctime() преобразование значения времени в цепочку символов;ctime_r() преобразование значения времени в цепочку символов;ftw () getitimer() опрос текущих характеристик gets() чтение строки со стандартного ввода;gettimeofday() опрос текущего времени с повышенной точностью;isascii() проверка, принадлежит ли символ множеству 7-битных символов
US-ASCII;pthread_getconcurrency() опрос уровня параллелизма потоков управления;pthread_setconcurrency() установка уровня параллелизма потоков управления;rand_r() генерация последовательности псевдослучайных целых чисел;setitimer() установка текущих характеристик setpgrp() установка sighold() добавление сигнала в маску сигналов вызывающего процесса;sigignore() установка режима sigpause() удаление сигнала из sigrelse() удаление сигнала из sigset() модификация режима реагирования на сигнал;siginterrupt() разрешить сигналу прерывать функции;tempnam() генерация имени для временного файла;tmpnam() генерация имени для временного файла;toascii() преобразование в 7-битные символы US-ASCII;ulimit() опрос и установка ограничений процесса;utime() изменение ассоциированных с файлами данных о времени.Следующие функции и символы в стандарте POSIX.1-2008 переведены в разряд обязательных:
aio_cancel() аннулирование запросов на асинхронный ввод/вывод, ожидающих
обработки;aio_error() опрос кода ошибки операции асинхронного ввода/вывода;aio_fsync() aio_read() aio_return() опрос кода завершения операции асинхронного ввода/вывода;aio_suspend() ожидание завершения операций асинхронного ввода/вывода;aio_write() asctime_r() преобразование даты и времени в цепочку символов;catclose() закрытие каталога сообщений;catgets() чтение сообщения из каталога сообщений;catopen() clock_getres() опрос разрешающей способности часов;clock_gettime() опрос показаний часов;clock_nanosleep() clock_settime() установка показаний часов;ctime_r() преобразование значения времени в цепочку символов;dlclose() закрытие выполнимого dlerror() получение диагностической информации о процессе динамического
редактирования внешних связей;dlopen() открытие выполнимого dlsym() получение адреса символа из открытого выполнимого fchdir() flockfile() fstatvfs() получение интегральной информации о файловой системе,
содержащей заданный файл;ftrylockfile() попытка funlockfile() getc_unlocked() вариант getc() без требований потоковой безопасности;getchar_unlocked() вариант getchar() без требований потоковой безопасности;getgrgid_r() поиск элемента getgrnam_r() поиск элемента getlogin_r() опрос входного имени;getpgid() опрос getpwnam_r() поиск элемента базы данных пользователей по имени;getpwuid_r() поиск элемента базы данных пользователей по идентификатору
пользователя;getsid() опрос getsubopt() грамматический разбор аргументов - опций второго уровня из
цепочки символов;gmtime_r() преобразование значения времени в разбитое на компоненты
всемирное время;iconv() преобразование последовательности символов из одной кодировки в
другую;iconv_close() закрытие дескриптора преобразования из одной кодировки в
другую;iconv_open() получение дескриптора (открытие) преобразования из одной
кодировки в другую;lchown() смена владельца и группы lio_listio() ввод/вывод, управляемый списком;localtime_r() преобразование значения времени в разбитое на компоненты
местное время;mkstemp() генерация уникального имени файла;mmap() построение отображения объекта в памяти на группу страниц из
адресного пространства вызывающего процесса;mprotect() динамическая смена разрешенных видов доступа к отображенным
страницам;munmap() nanosleep() nl_langinfo() получение детальной информации о poll () posix_trace_timedgetnext_event() чтение очередного события из потока
трассировки;pread() чтение из файла без изменения pthread_atfork() регистрация обработчиков, ассоциированных с
функцией fork();pthread_attr_destroy() разрушение pthread_attr_getdetachstate() опрос pthread_attr_getguardsize() опрос атрибута - размера pthread_attr_getschedparam() опрос атрибутов планирования в атрибутных
объектах потоков управления;pthread_attr_init() инициализация pthread_attr_setdetachstate() установка pthread_attr_setguardsize() установка атрибута - размера pthread_attr_setschedparam() установка атрибутов планирования в атрибутных
объектах потоков управления;pthread_barrier_destroy() pthread_barrier_init() pthread_barrier_wait() синхронизация на барьере;pthread_barrierattr_destroy() pthread_barrierattr_init() pthread_cancel() заказ pthread_cleanup_pop() извлечение верхнего элемента из стека
функций-обработчиков завершения вызывающего потока управления и его
(обработчика) выполнение;pthread_cleanup_push() помещение элемента в стек функций-обработчиков
завершения вызывающего потока управления;pthread_cond_broadcast() разблокирование (прекращение ожидания) потоков
управления, блокированных на pthread_cond_destroy() pthread_cond_init() pthread_cond_signal() разблокирование (прекращение ожидания) потока
управления, блокированного на pthread_cond_timedwait() блокирование (ожидание) на pthread_cond_wait() блокирование на pthread_condattr_destroy() разрушение pthread_condattr_getclock() опрос атрибута - идентификатора часов реального
времени, используемых для ограничения ожидания на pthread_condattr_init() инициализация pthread_condattr_setclock() установка атрибута - идентификатора часов
реального времени, используемых для ограничения ожидания на pthread_create() pthread_detach() динамическое pthread_equal() сравнение на равенство структур типа pthread_t ;pthread_exit() терминирование вызывающего потока управления;pthread_getspecific() извлечение pthread_join() ожидание завершения заданного потока управления;pthread_key_create() создание pthread_key_delete() удаление pthread_mutex_destroy() pthread_mutex_init() pthread_mutex_lock() pthread_mutex_timedlock() попытка pthread_mutex_trylock() попытка pthread_mutex_unlock() pthread_mutexattr_destroy() pthread_mutexattr_gettype() pthread_mutexattr_init() pthread_mutexattr_settype() pthread_once() функция для решения проблемы однократного выполнения
pthread_rwlock_destroy() разрушение блокировок;pthread_rwlock_init() инициализация блокировок;pthread_rwlock_rdlock() установка блокировки на чтение;pthread_rwlock_timedrdlock() попытка установки блокировки на чтение с
контролем времени ожидания;pthread_rwlock_timedwrlock() попытка установки блокировки на запись с
контролем времени ожидания;pthread_rwlock_tryrdlock() попытка установки блокировки на чтение без
блокирования вызывающего потока управления;pthread_rwlock_trywrlock() попытка установки блокировки на запись без
блокирования вызывающего потока управления;pthread_rwlock_unlock() снятие pthread_rwlock_wrlock() установка блокировки на запись;pthread_rwlockattr_destroy() разрушение pthread_rwlockattr_init() инициализация pthread_self() опрос идентификатора вызвавшего потока;pthread_setcancelstate() установка состояния восприимчивости к
pthread_setcanceltype() установка типа pthread_setspecific() ассоциирование индивидуальных данных потока
управления;pthread_spin_destroy() разрушение спин-блокировок;pthread_spin_init() инициализация спин-блокировок;pthread_spin_lock() pthread_spin_trylock() попытка pthread_spin_unlock() pthread_testcancel() создание в вызывающем потоке управления точки
терминирования;putc_unlocked() вариант putc() без требований потоковой безопасности;putchar_unlocked() вариант putchar() без требований потоковой безопасности;pwrite() запись в файл без изменения rand_r() генерация последовательности псевдослучайных целых чисел;readdir_r() чтение каталога;sem_close() закрытие sem_destroy() ликвидация sem_getvalue() опрос sem_init() создание sem_open() создание sem_post() sem_timedwait() попытка sem_trywait() попытка sem_unlink() удаление sem_wait() захват семафора;sigqueue() генерирация сигнала реального времени;sigtimedwait() ожидание sigwaitinfo() ожидание statvfs() получение интегральной информации о файловых системах, содержащих
заданные файлы;strcasecmp() сравнение цепочек символов без учета регистра;strdup() дублирование цепочки символов;strerror_r() получение цепочки символов - сообщения об ошибке;strfmon() преобразование денежного значения в цепочку символов;strncasecmp() сравнение цепочек символов без учета регистра с ограничением
числа символов;strtok_r() разбиение строки символов на лексемы;tcgetsid() опрос timer_create() создание для процесса таймера, генерирующего уведомления о
наступлении заданного момента в виде сигнала реального времени;timer_delete() timer_getoverrun() опрос числа timer_gettime() запоминание в структуре текущих характеристик таймера с
заданным идентификатором;timer_settime() взведение или снятие таймера со взвода с установлением новых
характеристик;truncate() установка размера файла равным заданной величине;ttyname_r() получение маршрутного имени терминала;waitid() ожидание изменения состояния Можно видеть, что основная часть функций, ставших обязательными, обслуживает потребности приложений реального времени. Таким образом, поддержка реального времени - обязательный атрибут современных операционных систем.
В стандарте POSIX.1-2008 появились следующие новые функции и символы:
alphasort() сравнение алфавитного порядка двух dirfd() выделение dprintf() аналог fprintf() с записью результатов не в поток, а по файловому
дескриптору;duplocale() дублирование объекта, описывающего языково-культурную среду;faccessat() опрос доступности файла относительно fchmodat() смена режима доступа к файлу относительно fchownat() смена владельца и группы файла относительно fdopendir() fexecve() выполнение файла; аналог execve (), только файл задается не
маршрутным именем, а fmemopen() открытие потока с заданным буфером в памяти;freelocale() освобождение ресурсов, выделенных для объекта, описывающего
языково-культурную среду;fstatat() опрос статуса файла с возможностью явного задания начальной точки
для интерпретации относительных маршрутных имен;futimens() установка времени модификации и доступа к файлу, заданному
getdelim() чтение из потока до заданного разделителя;getline() чтение из потока до символа новой строки;isalnum_l() проверка, является ли заданный символ буквенно-цифровым в
заданной isalpha_l() проверка, является ли заданный символ буквой в заданной
isblank_l() проверка, является ли заданный символ пробелом в заданной
iscntrl_l() проверка, является ли заданный символ управляющим в заданной
isdigit_l() проверка, является ли заданный символ цифрой в заданной
isgraph_l() проверка, является ли заданный символ видимым в заданной
islower_l() проверка, является ли заданный символ строчной буквой в заданной
isprint_l() проверка, является ли заданный символ печатным в заданной
ispunct_l() проверка, является ли заданный символ знаком пунктуации в
заданной isspace_l() проверка, является ли заданный символ пробельным в заданной
isupper_l() проверка, является ли заданный символ прописной буквой в
заданной iswalnum_l() проверка, является ли заданный широкий символ буквенно-цифровым
в заданной iswalpha_l() проверка, является ли заданный широкий символ буквой
в заданной iswblank_l() проверка, является ли заданный широкий символ пробелом
в заданной iswcntrl_l() проверка, является ли заданный широкий символ управляющим
в заданной iswctype_l() проверка, принадлежит ли заданный широкий символ заданному
классу в заданной iswdigit_l() - проверка, является ли заданный широкий символ цифрой
в заданной iswgraph_l() проверка, является ли заданный широкий символ видимым
в заданной iswlower_l() проверка, является ли заданный широкий символ строчной буквой
в заданной iswprint_l() проверка, является ли заданный широкий символ печатным
в заданной iswpunct_l() проверка, является ли заданный широкий символ знаком пунктуации
в заданной iswspace_l() проверка, является ли заданный широкий символ пробельным в
заданной iswupper_l() проверка, является ли заданный широкий символ прописной буквой
в заданной iswxdigit_l() проверка, является ли заданный широкий символ
шестнадцатеричной цифрой в заданной isxdigit_l() проверка, является ли заданный символ шестнадцатеричной цифрой
в заданной linkat() создание ссылки на файл с возможностью явного задания двух
каталогов для интерпретации относительных маршрутных имен;mbsnrtowcs() преобразование цепочки символов с цепочку широких символов с
ограничением числа символов;mkdirat() создание каталога с возможностью явного задания начальной точки
для интерпретации относительных маршрутных имен;mkdtemp() создание уникального каталога или обычного файла;mkfifoat() создание канала с возможностью явного задания начальной точки
для интерпретации относительных маршрутных имен;mknodat() создание каталога, специального или обычного файла с возможностью
явного задания начальной точки для интерпретации относительных маршрутных имен;newlocale() создание или модийикацоя объекта, описывающего
языково-культурную среду;openat() открытие файла с возможностью явного задания начальной точки для
интерпретации относительных маршрутных имен;open_memstream() открытие потока ввода/вывода, ассоциированного с
динамически выделенным буфером в памяти, размер которого задается в байтах;open_wmemstream() открытие потока ввода/вывода, ассоциированного с
динамически выделенным буфером в памяти, размер которого задается в широких
символах;psiginfo() вывод в стандартный протокол информации о сигнале, заданном
структурой;psignal() вывод в стандартный протокол информации о сигнале, заданном
номером;pthread_mutexattr_getrobust() опрос значения атрибута устойчивости
pthread_mutexattr_setrobust() установка значения атрибута устойчивости
pthread_mutex_consistent() отметка состояния, защищенного устойчивым
readlinkat() чтение содержимое renameat() переименование файла с возможностью явного задания начальной
точки для интерпретации относительных маршрутных имен;scandir() просмотр каталогов с обработкой элементов;stpcpy() копирование цепочки символов с возратом указателя на конец
результата;stpncpy() копирование цепочки символов с ограничением числа символов и с
возратом указателя на конец результата;strcasecmp_l() сравнение цепочек символов без учета регистра в явно заданной
strcoll_l() сравнение цепочек символов с использованием категории LC_COLLATE
в явно заданной strfmon_l() преобразование денежного значения в цепочку символов в явно
заданной strncasecmp_l() сравнение цепочек символов без учета регистра с ограничением
числа символов в явно заданной strndup() дублирование цепочки символов с ограничением числа символов;strnlen() опрос длины цепочки символов с ограничением числа символов;strsignal() опрос имени сигнала;strxfrm_l() преобразование цепочки символов в явно заданной
symlinkat() создание tolower_l() преобразование прописных букв в строчные в явно заданной
toupper_l() преобразование строчных букв в прописные в явно заданной
towctrans_l() транслитерация широких символов в явно заданной
towlower_l() преобразование широких символов - прописных букв в строчные в
явно заданной towupper_l() преобразование широких символов - строчных букв в прописные в
явно заданной unlinkat() удаление uselocale() использование заданной языково-культурной среды в текущем потоке
управления;utimensat() установка времени модификации и доступа к файлу с возможностью
явного задания начальной точки для интерпретации относительных маршрутных имен;vdprintf() форматный вывод списка аргументов stdarg ;wcpcpy() копирование цепочки широких символов с возратом указателя на конец
результата;wcpncpy() копирование цепочки широких символов с ограничением числа символов
и с возратом указателя на конец результата;wcscasecmp() сравнение цепочек широких символов без учета регистра;wcscasecmp_l() сравнение цепочек широких символов без учета регистра в явно
заданной wcscoll_l() сравнение цепочек широких символов с использованием категории LC_COLLATE в явно заданной wcsdup() дублирование цепочки широких символов;wcsncasecmp() сравнение цепочек широких символов без учета регистра с
ограничением числа символов;wcsncasecmp_l() сравнение цепочек широких символов без учета регистра с
ограничением числа символов в явно заданной wcsnlen() опрос длины цепочки широких символов с ограничением числа
символов;wcsnrtombs() преобразование цепочки широких символов в цепочку символов с
ограничением числа широких символов;wcsxfrm_l() преобразование цепочки широких символов в явно заданной
wctrans_l() определение отображения символов в явно заданной
wctype_l() определение Из предыдущих разделов видно, что никаких принципиальных изменений в версии стандарта POSIX.1-2008 не произошло. Модификации в подавляющем большинстве носят очевидный, технический характер.
С концептуальной точки зрения единственным существенным нововведением в
стандарте POSIX.1-2008 является атрибут устойчивости
В стандарте POSIX.1-2008 определены следующие значения атрибута устойчивости
PTHREAD_MUTEX_STALLED
Это подразумеваемое значение. Никаких специальных действий в случае
терминирования владельца
PTHREAD_MUTEX_ROBUST
Если процесс, содержащий поток управления, являющийся владельцем устойчивого
EOWNERDEAD.
В ситуации, когда терминируется поток управления -
Уведомленный поток управления может затем вновь попытаться отметить состояние,
защищенное устойчивым pthread_mutex_consistent(). Последующий успешный вызов функции pthread_mutex_unlock() приведет к pthread_mutex_consistent(), он должен
оставаться в перманентно некорректном состоянии, а все попытки его захвата
должны завершаться неудачей с кодом ошибки ENOTRECOVERABLE. Единственной
допустимой операцией над подобный pthread_mutex_destroy().
Функции pthread_mutexattr_getrobust() и pthread_mutexattr_setrobust(),
служащие, соответственно, для опроса и установки значения атрибута устойчивости
#include <pthread.h> int pthread_mutexattr_getrobust (const pthread_mutexattr_t *restrict attr, int *restrict robust); int pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust);
В случае успешного завершения результ функции равен нулю, а текущее значение
атрибут устойчивости помещается по указателю .
Отметим, что содержательные действия, требующиеся для возврата pthread_mutex_unlock() без предварительного вызова pthread_mutex_consistent().
После этого остается только разрушить pthread_mutex_destroy(), и затем повторно инициализировать его посредством
вызова функции pthread_mutex_init(). Правда, для этого требуется наличие
координации с потоками управления, блокированными на мьютексе, поскольку в
противном случае вызов функции pthread_mutex_lock() со ссылкой
на объект-pthread_mutex_destroy(), приведет к неопределенному поведению.
Упоминавшаяся выше функция pthread_mutex_consistent() описывается очевидным образом (см. листинг P.2):
#include <pthread.h> int pthread_mutex_consistent (pthread_mutex_t *mutex);
Изменения, произведенные в стандарте POSIX.1-2008, можно назвать косметическими, за исключением перевода средств реального времени в разряд обязательных. Вероятно, следующая версия стандарта привнесет больше нового.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.