Provided by: manpages-pl-dev_4.15.0-9_all bug

NAZWA

       write - zapisuje do deskryptora pliku

SKŁADNIA

       #include <unistd.h>

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

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.

ZGODNE Z

       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,
       on Linux before version 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)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  5.13  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów oraz  najnowszą  wersję  oryginału  można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.