WRITE(2)

NAZWA
write - zapis do deskryptora pliku

SKŁADNIA
#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

OPIS
write zapisuje maksymalnie count bajtów do pliku wskazywanego przez deskryptor fd. Zapis następuje z bufora wskazywanego przez buf. POSIX wymaga, by read(), które może pojawić się po zakończeniu write(), zwróciło nowe dane. Należy zauważyć, że nie wszystkie systemy plików są zgodne z POSIX.

WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracana jest liczba zapisanych bajtów (zero oznacza nie zapisanie niczego). Po błędzie zwracane jest -1 i odpowiednio ustawiane errno. Jeśli count jest równe zero, a deskryptor pliku odnosi się do zwykłego pliku, zostanie zwrócone zero, nie powodując żadnych innych efektów. Dla plików specjalnych wyniki są nieprzenośne.

BŁĘDY

EBADF
    fd nie jest prawidłowym deskryptorem pliku lub nie jest otwarty dla zapisu.

EINVAL
    fd jest dowiązany do obiektu, który nie nadaje się do zapisu.

EFAULT
    buf jest poza dostępną dla użytkownika przestrzenią adresową.

EFBIG
    Wykonano próbę zapisu do pliku przekraczającą zależny od implementacji maksymalny rozmiar pliku lub przekraczającą maksymalny rozmian pliku dla danego procesu. Ewentualnie, wystąpiła próba zapisu na pozycji poza maksymalną dozwoloną pozycją w pliku.

EPIPE
    fd jest podłączony do potoku, lub gniazda, którego koniec czytający jest zamknięty. Gdy wystąpi taka sytuacja, proces piszący również otrzyma sygnał SIGPIPE. (Tak więc wartość zwracana podczas zapisu jest widoczna jedynie, gdy program przechwytuje blokuje lub ignoruje ten sygnał.)

EAGAIN
    Wybrano nieblokujące we/wy (za pomocą O_NONBLOCK), a do potoku lub gniazda fd nie można natychmiast zapisać danych.

EINTR
    Wywołanie zostało przerwane sygnałem przed zapisaniem jakichkolwiek danych.

ENOSPC
    Na urządzeniu zawierającym plik, do którego odnosi się fd, nie ma miejsca na dane.

EIO Podczas modyfikacji i-węzła wystąpił niskopoziomowy błąd we/wy.

Mogą wystąpić również inne błędy, zależne od rodzaju obiektu podłączonego do fd.

ZGODNE Z
SVr4, SVID, POSIX, X/OPEN, 4.3BSD. SVr4 dokumentuje dodatkowe kody błędów EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO i ERANGE. Pod SVr4 zapis może zostać przerwany w każdej chwili, nie zaś tylko przed zapisaniem jakichkolwiek danych, zwracając EINTR.

NOTES
Pomyślne zakończenie write nie gwarantuje, że dane zostały zapisane na dysku. W rzeczywistości, w niektórych błędnych implementacjach nie gwarantuje to nawet, że zostało zarezerwowane miejsce na dane. Jedynym sposobem, aby te rzeczy zapewnić jest wywołanie fsync(2) po zapisaniu wszytkich danych.

ZOBACZ TAKŻE
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), read(2), select(2), fwrite(3), writev(3)