oracular (2) fdatasync.2.gz

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