Это ставит реентерабельные? - PullRequest
4 голосов
/ 09 мая 2011

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

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

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

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

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

2 голосов
/ 09 мая 2011

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

#include <unistd.h>

const char* msg = "The message to print.";
write(STDOUT_FILENO, msg, strlen(msg));
...