Это ставит реентерабельные?

Является int puts(const char*); Реентрантная? Могу ли я безопасно поместить его в обработчик сигнала?

2 ответа

Решение

Вот таблица, в которой все функции считаются безопасными для обработки сигналов:

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

puts По-видимому, его нет в этом списке, однако он считается реентерабельным, но не асинхронным, возможно, поэтому его нет в вышеупомянутом списке.

Нет, это не так, вы можете использовать write(), что является безопасным асинхронным сигналом, для вывода сообщений из обработчика сигнала:

#include <unistd.h>

const char* msg = "The message to print.";
write(STDOUT_FILENO, msg, strlen(msg));
Другие вопросы по тегам