, ( ), EINTR. , (a) , (b) , errno EINTR.
, "--", , - :
while(size > 0) {
int written = write(filedes, buf, size);
if (written == -1) {
if (errno == EINTR) continue;
return -1;
}
buf += written;
size -= written;
}
return 0;
- , EINTR, , , , ( , , ):
int total = 0;
while(size > 0) {
int written = write(filedes, buf, size);
if (written == -1) {
if (errno == EINTR) continue;
return (total == 0) ? -1 : total;
}
buf += written;
total += written;
size -= written;
}
return total;
GNU TEMP_FAILURE_RETRY, , , . .