Provided by: manpages-pl-dev_0.5-1_all bug

NAZWA

       write - zapisuje do deskryptora pliku

SKŁADNIA

       #include <unistd.h>

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

OPIS

       write()  zapisuje  do  liczba  bajtów z bufora wskazanego przez buf do pliku określonego przez deskryptor
       pliku 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).

       Standard  POSIX  wymaga  aby   read  które  mogą  nastąpić po write() zwrócił nowe dane. Pamiętaj, że nie
       wszystkie systemy plików są zgodne z POSIX.

ZWRACANA WARTOŚĆ

       Po pomyślnym wykonaniu, zwracana jest liczba zapisanych  bajtów  (zero  informuje,  że  nic  nie  zostało
       zapisane). Przy błędzie zwracane jest -1 i ustawiana jest odpowiednia wartość zmiennej  errno.

       Jeżeli  liczba  jest  zerem  a  fd  wskazuje na zwykły (regular) plik, wtedy write()  może zwrócić status
       niepowodzenia jeżeli zostanie wykryty jeden z poniższych błędów. Jeżeli nie wykryto  błędów,  0  zostanie
       zwrócone bez żadnych innych skutków. Jeżeli liczba jest zerem a  fd odwołuje się do pliku innego typu niż
       zwykły (regular), skutki nie są sprecyzowane.

BŁĘDY

       EAGAIN Deskryptor  pliku  fd odwołuje się do gniazda i został oznaczony jako nieblokujący (O_NONBLOCK), a
              zapis go zablokuje.

       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    Podczas modyfikacji i-węzła nastąpił niskopoziomowy błąd wejścia/wyjścia.

       ENOSPC Urządzenie zawierające plik wskazany przez fd nie ma miejsca na dane.

       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.

ZGODNOŚĆ

       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

       Pomyślny powrót z write() nie daje gwarancji, że  dane  zostały  faktycznie  zapisane  na  urządzeniu.  W
       rzeczywistości, w niektórych wadliwych implementacjach, nie ma nawet pewności, że przestrzeń potrzebna do
       zapisu  została pomyślnie zarezerwowana. Jedynym sposobem aby mieć pewność, że dane zostały zapisane jest
       wywołanie  fsync(2)  po skończeniu zapisywania wszystkich danych przez write().

       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.

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  3.52  projektu  Linux man-pages. Opis projektu oraz
       informacje dotyczące zgłaszania błędów można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Artur Kruszewski  <mazdac@gmail.com>
       i Michał Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie  jest  częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  3.52 oryginału.

Linux                                              2013-01-27                                           WRITE(2)