Вызов стандартной библиотечной функции в обработчике сигналов

Почему вызов является стандартной библиотечной функцией в препятствовавшем обработчике сигналов?

5
задан Good Person 4 March 2013 в 04:12
поделиться

4 ответа

Это объясняется в документации GNU LibC.

Если вы вызываете функцию в обработчике, убедитесь, что она реентерабельна по отношению к сигналам, или убедитесь, что сигнал не может прервать вызов связанной функции.

И на всякий случай, вот страница Википедии о реентерабельных функциях.

Компьютерная программа или процедура называется реентерабельной, если она может быть безопасно вызвана снова до завершения предыдущего вызова (т.е. она может безопасно выполняться параллельно).

11
ответ дан 18 December 2019 в 14:44
поделиться

Все работает нормально и все такое, пока вы не столкнетесь с загадочными ошибками, которые невозможно отследить :)

сигнал man 7 даст у вас есть список системных вызовов, которые можно безопасно вызывать из обработчика сигналов. Он также описан в POSIX.

1
ответ дан 18 December 2019 в 14:44
поделиться

Поскольку функция библиотеки не может быть повторно входимой.

0
ответ дан 18 December 2019 в 14:44
поделиться

Это не только проблемы с повторным входом, в зависимости от сигнала, являющегося службами, вы также хотите избежать случайных вызовов malloc () (например, asprintf ()) и других вариативных расширений (например, printf ()).

1
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: