Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       fsync, fdatasync - synchronizuje pełny, wewnątrzrdzeniowy stan pliku z zapisanym na dysku

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       int fsync(int fd);

       int fdatasync(int fd);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       fsync():
           glibc 2.16 i późniejsze:
               Nie jest konieczne definiowanie makr
           glibc do 2.15 włącznie:
               _BSD_SOURCE || _XOPEN_SOURCE
                   || /* Od glibc 2.8: */ _POSIX_C_SOURCE >= 200112L

       fdatasync():
           _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

OPIS

       fsync()   przenosi   („opróżnia”)  wszystkie  zmodyfikowane  wewnątrzrdzeniowo  dane  (tj.
       zmodyfikowane strony bufora pamięci podręcznej) pliku, do którego  odnosi  się  deskryptor
       pliku  fd  na  dysk  (lub inny trwały nośnik), dzięki czemu wszystkie zmienione informacje
       mogą być pozyskane nawet w przypadku załamania  lub  przeładowania  systemu.  Obejmuje  to
       zapis  bezpośredni  i  opróżnienie  bufora  dysku  (jeśli istnieje). Wywołanie blokuje, do
       momentu gdy urządzenie poinformuje o zakończeniu transferu.

       Oprócz opróżnienia plików danych, fsync() opróżnia również  metadane  związane  z  plikiem
       (zob. inode(7)).

       Wywołanie  fsync  nie  gwarantuje,  że  wpis  w  katalogu, zawierający informacje o pliku,
       również zostanie zapisany na dysku. Aby to osiągnąć, wymagane jest jawne  wywołanie  fsync
       na deskryptorze pliku dla katalogu.

       fdatasync()  jest  podobne do fsync(), lecz nie opróżnia zmodyfikowanych metadanych, chyba
       że są one konieczne do kolejnego pomyślnego pobrania danych. Przykładowo, zmiana  st_atime
       lub st_mtime (odpowiednio, czasu dostępu i czasu ostatniej modyfikacji; zob. inode(7)) nie
       wymaga opróżnienia, ponieważ nie jest to konieczne,  aby  następny  odczyt  danych  został
       pomyślnie  obsłużony.  Z  drugiej  strony,  zmiana  rozmiaru  pliku  (st_size, dokonana na
       przykład przez ftruncate(2)), wymagałaby opróżnienia metadanych.

       Celem fdatasync()  jest  redukcja  aktywności  dysku  w  przypadku  aplikacji,  które  nie
       wymagają, aby wszystkie metadane były zsynchronizowane z tymi na dysku.

WARTOŚĆ ZWRACANA

       W  przypadku  powodzenia,  te  wywołania zwracają zero. W razie wystąpienia błędu zwracane
       jest -1 i ustawiane jest errno wskazując błąd.

BŁĘDY

       EBADF  fd nie jest prawidłowym otwartym deskryptorem pliku.

       EINTR  Funkcja przerwana przez sygnał; zob. signal(7).

       EIO    Wystąpił błąd podczas synchronizacji.  Błąd  może  odnosić  się  do  zapisu  danych
              dokonanych  do innego deskryptora pliku tego samego pliku. Od Linuksa 4.13, błędy z
              bufora  zapisu  będą  zgłaszane  do  wszystkich  deskryptorów  pliku,  które  mogły
              zapisywać  dane wyzwalające błąd. Niektóre systemy plików (np. NFS) ściśle pilnują,
              która dane przeszły przez który deskryptor  pliku,  co  daje  dokładniej  zgłaszane
              błędy.  Inne  systemy  plików  (np. większość lokalnych) zgłoszą błąd do wszystkich
              deskryptorów pliku, które były otwarte na pliku, w momencie odnotowania błędu.

       ENOSPC Wyczerpano miejsce na dysku podczas synchronizacji.

       EROFS
       EINVAL fd jest powiązany ze specjalnym plikiem (np. potokiem, FIFO  lub  gniazdem),  który
              nie obsługuje synchronizacji.

       ENOSPC
       EDQUOT fd  jest  skojarzony  z  plikiem  na  NFS  lub  na innym systemie plików, który nie
              przydziela miejsca w momencie wywołania systemowego write(2) i któryś z poprzednich
              zapisów nie powiódł się ze względu na brak miejsca na dysku.

WERSJE

       W  systemach  POSIX,  na  których  dostępny  jest fdatasync(), _POSIX_SYNCHRONIZED_IO jest
       zdefiniowany w <unistd.h> na wartość większą od 0 (zob. też sysconf(3)).

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, 4.2BSD.

       W Linuksie 2.2 i wcześniejszych, fdatasync() jest równoważny fsync() i  nie  daje  żadnych
       korzyści pod względem wydajności.

       Implementacja  fsync()  na  starszych  jądrach  i  rzadziej używanych systemach plików nie
       potrafi opróżniać buforów dysku. W takich przypadkach konieczne  jest  wyłączenie  buforów
       dysku za pomocą hdparm(8) lub sdparm(8), aby zagwarantować bezpieczne wykonanie.

       W  UNIX  System  V  Wydanie  4  AT&T  fd  musi być otwarty do zapisu. Jest to samo w sobie
       niekompatybilne z oryginalnym interfejsem BSD  i  zabronione  przez  POSIX,  ale  mimo  to
       przetrwało w HP-UX i AIX.

ZOBACZ TAKŻE

       sync(1),  bdflush(2),  open(2), posix_fadvise(2), pwritev(2), sync(2), sync_file_range(2),
       fflush(3), fileno(3), hdparm(8), mount(8)

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony   podręcznika   są:   Przemek   Borys
       <pborys@dione.ids.pl>,  Andrzej  Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach
       <michal.kulach@gmail.com>

       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⟩.