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

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)