Это ставит реентерабельные?
Является int puts(const char*);
Реентрантная? Могу ли я безопасно поместить его в обработчик сигнала?
2 ответа
Решение
Вот таблица, в которой все функции считаются безопасными для обработки сигналов:
"Следующая таблица определяет набор функций, которые должны быть либо входящими, либо не прерываемыми сигналами и должны быть безопасными при асинхронном сигнале".
puts
По-видимому, его нет в этом списке, однако он считается реентерабельным, но не асинхронным, возможно, поэтому его нет в вышеупомянутом списке.
Нет, это не так, вы можете использовать write()
, что является безопасным асинхронным сигналом, для вывода сообщений из обработчика сигнала:
#include <unistd.h>
const char* msg = "The message to print.";
write(STDOUT_FILENO, msg, strlen(msg));