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   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.8                              2 maja 2024 r.                                         fsync(2)