Scroll to navigation

WRITE(2) Podręcznik programisty Linuksa 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

fd nie jest prawidłowym deskryptorem pliku lub nie jest otwarty dla zapisu.
fd jest dowiązany do obiektu, który nie nadaje się do zapisu.
buf jest poza dostępną dla użytkownika przestrzenią adresową.
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.
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ł.)
Wybrano nieblokujące we/wy (za pomocą O_NONBLOCK), a do potoku lub gniazda fd nie można natychmiast zapisać danych.
Wywołanie zostało przerwane sygnałem przed zapisaniem jakichkolwiek danych.
Na urządzeniu zawierającym plik, do którego odnosi się fd, nie ma miejsca na dane.
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)

2001-12-13 Linux 2.0.32