jeśli akurat w danej chwili ilość danych dostępnych na połączeniu sieciowym jest mniejsza od żądanej, lub też jeśli zanim odczytano wszystkie dane nastąpiło przerwanie.
I o ile wartości od 1 do count są poprawne, wartość 0 może oznaczać tylko jedno – koniec pliku. Jeśli przerwanie nastąpiło przed odczytaniem danych, kernel zwraca kod błędu (errno) EINTR, jeśli zaś nie było aktualnie żadnych danych, a połączenie było otwarte w trybie nieblokującym – EAGAIN.
Inne możliwe błędy to: EBADF – błędny deskryptor EINVAL – deskryptor nie do odczytu (np. otwarty jako tylko do zapisu) EIO – błąd wejścia wyjścia EISDIR – deskryptor wskazuje na katalog. Na niektórych systemach katalogi można czytać za pomocą read, jednak służyło to wyłącznie implementacji odpowiednich procedur libc. Na innych jest to niedozwolone, a libc radzi sobie w inny sposób. EFAULT – błędny adres bufora, poza przestrzenią adresową procesu
write write jest zdefiniowany w unistd.h jako: ssize_t write(int fd, const void *buf, size_t count);
Argumenty mają takie samo znaczenie jak w read – write pisze do deskryptora fd co najwyżej count bajtów z bufora buf i zwraca liczbę zapisanych bajtów.