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