>>20
とりあえずerrnoがEINTRかどうか見てから判断しても遅くはないだろう
signalは無視することもできるが、単に無視しちゃまずい
場合もあるだろう(子プロセスからのSIGCHLDを待ってる場合など)

sigaction()なら古いsignal()より細かい制御ができるが、
sigaction()がサポートされてるかどうかとか
どんなシステムコールが再開をサポートしてるかとか
その辺はシステムによるんで、結局
while ((n_read = read(fd, buff, sizeof buff)) == -1 && errno == EINTR)
;
みたいにループにしちゃうのは良く使う手だ