Многие системные вызовы, такие как close( fd ), могут быть прерваны сигналом. В этом случае обычно возвращается -1 и errno устанавливается EINTR.
Вопрос в том, что правильно делать? Скажем, я все еще хочу, чтобы этот fd был закрыт.
Что я могу придумать:
while( close( fd ) == -1 )
if( errno != EINTR ) {
ReportError();
break;
}
Может ли кто-нибудь предложить лучший/более элегантный/стандартный способ справиться с этой ситуацией?
UPDATE:
Как заметил mux, флаг SA_ RESTART может использоваться при установке обработчика сигнала.
Может ли кто-нибудь сказать мне, какие функции гарантированно перезапускаются во всех системах POSIX (не только Linux)?