Provided by: manpages-pl-dev_4.21.0-2_all 

NAZWA
write - zapisuje do deskryptora pliku
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <unistd.h>
ssize_t write(int fd, const void buf[.liczba], size_t liczba);
OPIS
write() writes up to count bytes from the buffer starting at buf to the file referred to by the file
descriptor fd.
Liczba bajtów zapisanych może być mniejsza niż liczba jeżeli, na przykład nie ma wystarczającej ilości
wolnej przestrzeni na urządzeniu fizycznym, lub zasoby RLIMIT_FSIZE zostały wyczerpane (patrz
setrlimit(2)), wywołanie zostało przerwane przez obsługę sygnału po zapisaniu mniej niż liczba bajtów
(spójrz również na pipe(7)).
Dla przeszukiwalnych plików (np. takie na których można użyć lseek(2), na przykład, pliki zwykłe
(regular)) zapis ma miejsce w danym przesunięciu pliku (offsecie), i to przesunięcie jest zwiększane o
ilość aktualnie zapisanych danych. Jeżeli plik został otwarty (open(2)) z O_APPEND, wtedy przesunięciem
(offsetem) jest koniec pliku przed zapisem. Dostosowanie przesunięcia pliku i operacja zapisu są
wykonywane jako nierozdzielne (atomowe).
POSIX requires that a read(2) that can be proved to occur after a write() has returned will return the
new data. Note that not all filesystems are POSIX conforming.
According to POSIX.1, if count is greater than SSIZE_MAX, the result is implementation-defined; see NOTES
for the upper limit on Linux.
WARTOŚĆ ZWRACANA
On success, the number of bytes written is returned. On error, -1 is returned, and errno is set to
indicate the error.
Note that a successful write() may transfer fewer than count bytes. Such partial writes can occur for
various reasons; for example, because there was insufficient space on the disk device to write all of the
requested bytes, or because a blocked write() to a socket, pipe, or similar was interrupted by a signal
handler after it had transferred some, but before it had transferred all of the requested bytes. In the
event of a partial write, the caller can make another write() call to transfer the remaining bytes. The
subsequent call will either transfer further bytes or may result in an error (e.g., if the disk is now
full).
If count is zero and fd refers to a regular file, then write() may return a failure status if one of the
errors below is detected. If no errors are detected, or error detection is not performed, 0 is returned
without causing any other effect. If count is zero and fd refers to a file other than a regular file,
the results are not specified.
BŁĘDY
EAGAIN Deskryptor pliku fd odwołuje się do gniazda i został oznaczony jako nieblokujący (O_NONBLOCK), a
zapis go zablokuje. Zob. open(2) aby dowiedzieć się więcej o fladze O_NONBLOCK.
EAGAIN lub EWOULDBLOCK
Deskryptor pliku fd odwołuje się do gniazda i został oznaczony jako nieblokujący (O_NONBLOCK), a
zapis go zablokuje. POSIX.1-2001 pozwala w tej sytuacji na zwrócenie błędu ale nie wymaga aby ta
stała miała taką samą wartość, portowalna aplikacja powinna sprawdzać obie możliwości.
EBADF fd nie jest prawidłowym deskryptorem pliku lub nie jest otwarty do zapisu
EDESTADDRREQ
fd odwołuje się do gniazda datagramowego dla którego adres nie został ustalony przy użyciu
connect(2).
EDQUOT Kwota bloków dyskowych użytkownika dotycząca systemu plików zawierającego plik wskazany przez fd
została wyczerpana.
EFAULT buf jest poza dostępną przestrzenią adresową.
EFBIG Dokonano próby zapisu pliku który przekracza zdefiniowane w implementacji maksymalne rozmiary
pliku, rozmiary pliku procesu lub zapis na pozycję wykraczającą poza maksymalne dozwolone
przesunięcie (offset).
EINTR Wywołanie zostało przerwane przez sygnał przed zapisaniem jakichkolwiek danych, patrz signal(7).
EINVAL fd jest dołączony do obiektu nieodpowiedniego do zapisu, plik został otwarty z flagą O_DIRECT i
adres podany w buf bądź wartość liczba lub przesunięcie (offset) nie zostały odpowiednio
dopasowane.
EIO A low-level I/O error occurred while modifying the inode. This error may relate to the write-back
of data written by an earlier write(), which may have been issued to a different file descriptor
on the same file. Since Linux 4.13, errors from write-back come with a promise that they may be
reported by subsequent. write() requests, and will be reported by a subsequent fsync(2)
(whether or not they were also reported by write()). An alternate cause of EIO on networked
filesystems is when an advisory lock had been taken out on the file descriptor and this lock has
been lost. See the Lost locks section of fcntl(2) for further details.
ENOSPC Urządzenie zawierające plik wskazany przez fd nie ma miejsca na dane.
EPERM Operacja zablokowana przez zakluczenie pliku (ang. file seal); zob. fcntl(2).
EPIPE fd jest podłączony do potoku (pipe) lub gniazda (socket) którego końcówka odczytująca jest
zamknięta. Gdy taka sytuacja następuje, proces zapisujący również otrzyma sygnał SIGPIPE. (Więc
wartość zwracana przez write() jest widziana tylko wówczas gdy program obsługuje, blokuje lub
ignoruje ten sygnał).
Zależnie od obiektu podłączonego do fd, mogą także zajść inne (nieopisane) błędy.
STANDARDY
SVr4, 4.3BSD, POSIX.1-2001.
Pod SVr4 EINTR jest zwracane zarówno gdy po przerwaniu wywołania, dane zostały zapisane częściowo lub
przed jakimkolwiek zapisem.
UWAGI
Typy size_t i ssize_t to odpowiednio liczba całkowita bez i ze znakiem, zgodnie z POSIX.1.
A successful return from write() does not make any guarantee that data has been committed to disk. On
some filesystems, including NFS, it does not even guarantee that space has successfully been reserved for
the data. In this case, some errors might be delayed until a future write(), fsync(2), or even close(2).
The only way to be sure is to call fsync(2) after you are done writing all your data.
Jeżeli write() zostanie przerwany przez obsługe sygnału przed zapisaniem jakichkolwiek danych, wtedy
wywołanie nie powiedzie się i zwracany jest błąd EINTR; jeżeli przerwanie nastąpi po zapisaniu co
najmniej jednego bajtu danych, wywołanie powiedzie się i zwróci ilość zapisanych bajtów danych.
W Linuksie, write() (i podobne wywołania systemowe) mogą dokonać transferu co najwyżej 0x7ffff000 (2 147
479 552) bajtów, zwracając liczbę bajtów rzeczywiście przetransferowanych (jest to prawdziwe zarówno dla
systemów 32 jak i 64-bitowych).
An error return value while performing write() using direct I/O does not mean the entire write has
failed. Partial data may be written and the data at the file offset on which the write() was attempted
should be considered inconsistent.
BŁĘDY
Zgodnie z POSIX.1-2008/SUSv4 Section XSI 2.9.7 ("Thread Interactions with Regular File Operations"):
Wszystkie poniższe funkcje powinny być atomowe w odniesieniu do innych biorąc pod uwagę wyniki
określone w POSIX.1-2008, gdy działają na zwykłych plikach lub dowiązaniach symbolicznych: ...
Among the APIs subsequently listed are write() and writev(2). And among the effects that should be
atomic across threads (and processes) are updates of the file offset. However, before Linux 3.14, this
was not the case: if two processes that share an open file description (see open(2)) perform a write()
(or writev(2)) at the same time, then the I/O operations were not atomic with respect to updating the
file offset, with the result that the blocks of data output by the two processes might (incorrectly)
overlap. This problem was fixed in Linux 3.14.
ZOBACZ TAKŻE
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2),
fwrite(3)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Artur Kruszewski <mazdac@gmail.com>,
Michał Kułach <michal.kulach@gmail.com> i Robert Luberda <robert@debian.org>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.03 4 grudnia 2022 r. write(2)