Значения errno
могут быть разными для разных систем (даже для разных Unix-подобных систем), поэтому в коде следует использовать символические константы.
Функция perror
будет распечатана (для stderr ) описательная строка последнего errno
значения вместе с предоставленной вами строкой.
man 3 perror
Функция strerror
просто возвращает const char *
строке, которая perror
печатает.
Если в вашей системе 4 равно EINTR
, то во время разговора вы получили сигнал для чтения.Есть способы предотвратить прерывание ваших системных вызовов, но часто вам просто нужно:
while (1) {
ssize_t x = read(file, buf, len);
if (x < 0) {
if (errno == EINTR) {
errno = 0;
continue;
} else {
// it's a real error