Файловый дескриптор в каждом процессе ссылается на одну и ту же файловую структуру.
52
Эта терминология распространена в большей части литературы по стандартам, включая единую спецификацию Unix (Single Unix Specification).
53
Это механизм, используемый для утилиты nohup
.
54
Необходимость в реентерабельных функциях не ограничивается обработчиками сигналов. Многопоточные приложения должны с большой осторожностью относиться к обеспечению реентерабельности и блокировкам.
55
Вообще-то, не совсем так. Модель обработки сигналов ANSI/ISO С специфицирована немного иначе, чем мы ее представили. Однако она допускает сброс обработчика в значение SIG_DFL
перед доставкой сигнала, что делает функции signal()
в ASNI/ISO С ненадежными.
56
Спецификация POSIX Real Time Signal позволяет некоторые сигналам ставить в очередь, и для сигналов, работающих с ограниченными объемами данных, существенно изменяет эту модель. Сигналы реального времени обсуждаются ближе к концу этой главы.
57
Это аналогично типу fd_set
, который используется системным вызовом select ()
, описанным в главе 13.
58
Разница между быстрыми и медленными файлами та же, что и между быстрыми и медленными системными вызовами, и она обсуждается в главе 11.
59
Имеются и другие отличия между этими вызовами; они касаются многопоточных программ, которые в настоящей книге не рассматриваются.
60
В действительности она отправляет сигнал текущему потоку текущего процесса.
61
Эти флаги определены в Single Unix Specification. Многие из них имеют имена, отличающиеся от описанных в тексте.
62
Хотя ссылка на память, которая может быть заполнена, может работать в некоторых системах, это не является переносимым. Некоторые реализации malloc()
возвращают память операционной системе, что при обращении к возвращенной памяти вызывает ошибку сегментации; другие — перезаписывают части заполненной памяти служебной информацией.
63
Применение sigprocmask()
и pause()
для получения требуемого поведения может вызвать состояние состязаний, если сигнал, появление которого ожидается, поступит между этими двумя системными вызовами.
64
Более подробно о дампах памяти рассказывается в главе 10.
65