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