oracular (2) truncate.2.gz

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

NAZWA

       truncate, ftruncate - ustawia długość pliku

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       int truncate(const char *path, off_t length);
       int ftruncate(int fd, off_t length);

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

       truncate():
           _XOPEN_SOURCE >= 500
               || /* Od glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || /* glibc <= 2.19: */ _BSD_SOURCE

       ftruncate():
           _XOPEN_SOURCE >= 500
               || /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
               || /* glibc <= 2.19: */ _BSD_SOURCE

OPIS

       Funkcje  truncate()  i  ftruncate() powodują, że zwykły plik nazwany za pomocą path lub do którego odnosi
       się fd, jest docinany do długości dokładnie length bajtów.

       Jeśli plik był wcześniej większy od tego rozmiaru, dodatkowe dane są tracone. Jeśli  plik  był  wcześniej
       mniejszy, jest powiększany, a odczyt z nowej części zwróci bajty null („\0”).

       Przesunięcie pliku nie ulega zmianie.

       Jeśli  rozmiar  pliku  się  zmieni,  aktualizowane  są  pola st_ctime i st_mtime pliku (odpowiednio: czas
       ostatniej zmiany statusu i czas ostatniej  modyfikacji;  zob.  inode(7)),  a  bity  trybu  set-user-ID  i
       set-group-ID mogą być wyczyszczone.

       Przy ftruncate(), plik musi być otwarty do odczytu; przy truncate(), plik musi być zapisywalny.

WARTOŚĆ ZWRACANA

       Po  pomyślnym  zakończeniu  zwracane  jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując
       błąd.

BŁĘDY

       Dla truncate():

       EACCES Brak praw do przeszukiwania na składowej ścieżki lub  nazwany  plik  nie  jest  zapisywalny  przez
              użytkownika (zob. też path_resolution(7))

       EFAULT Argument path wskazuje poza przydzieloną procesowi przestrzeń adresową.

       EFBIG  Argument length jest większy, niż maksymalny rozmiar pliku. (XSI)

       EINTR  Wywołanie  zostało przerwane przez procedurę obsługi sygnału, w trakcie zablokowania w oczekiwaniu
              na ukończenie; zob. fcntl(2) i signal(7).

       EINVAL Argument length jest ujemny lub większy, niż maksymalny rozmiar pliku.

       EIO    Podczas aktualizacji i-węzła wystąpił błąd wejścia/wyjścia.

       EISDIR Wskazana nazwa pliku jest nazwą katalogu.

       ELOOP  Natrafiono na zbyt wiele dowiązań symbolicznych podczas tłumaczenia ścieżki.

       ENAMETOOLONG
              Składowa ścieżki przekroczyła 255 znaków lub cała ścieżka przekroczyła 1023 znaków.

       ENOENT Plik wskazywany przez nazwę nie istnieje.

       ENOTDIR
              Składowa ścieżki nie jest katalogiem.

       EPERM  System plików nie obsługuje powiększenia pliku poza jego aktualny rozmiar.

       EPERM  Operacja zablokowana, z powodu zapieczętowania pliku (ang. file seal); zob. fcntl(2).

       EROFS  Podany plik znajduje się na systemie plików przeznaczonym tylko do odczytu.

       ETXTBSY
              Plik jest plikiem wykonywalnym, który jest obecnie wykonywany.

       W przypadku ftruncate() stosują się te same błędy,  lecz  zamiast  nieprawidłowości  dotyczących  ścieżki
       path, tu błędy będą dotyczyć deskryptora pliku fd:

       EBADF  fd nie jest prawidłowym deskryptorem pliku.

       EBADF lub EINVAL
              fd nie jest otwarty do zapisu.

       EINVAL fd nie wskazuje na zwykły plik lub obiekt pamięci dzielonej POSIX.

       EINVAL lub EBADF
              Deskryptor  pliku  fd  nie jest otwarty do zapisu. POSIX zezwala na, a przenośne aplikacje powinny
              obsługiwać, oba błędy w tym przypadku (błędem w Linuksie jest EINVAL).

WERSJE

       Detale w OPISIE dotyczą systemów zgodnych z XSI. W systemach, które nie są zgodne z XSI,  standard  POSIX
       zezwala  na  dwa  typy  zachowań  w  przypadku  ftruncate(),  gdy length przekracza długość pliku (proszę
       zauważyć, że truncate() w ogóle nie jest wspomniane w  takim  środowisku):  albo  zwrócenie  błędu,  albo
       zwiększenie  pliku.  Podobnie  jak  większość  implementacji  Uniksa,  Linux  podąża za wymaganiem XSI na
       natywnych systemach  plików.  Jednak  niektóre  nierodzime  systemy  plików  nie  zezwalają  na  używanie
       truncate()  i ftruncate() do zwiększenia pliku poza jego aktualną długość: istotnym przykładem w Linuksie
       jest tu VFAT.

       Na niektórych architekturach 32-bitowych, sygnatura wywołania  dla  tych  wywołań  systemowych  może  być
       zróżnicowana, z powodów opisanych w syscall(2).

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, 4.4BSD, SVr4 (first appeared in 4.2BSD).

       Pierwotne  linuksowe  wywołania  truncate()  i  ftruncate() nie były zaprojektowane do obsługi przesunięć
       dużych plików. W konsekwencji, Linux 2.4 dodał wywołania systemowe truncate64()  i  ftruncate64(),  które
       potrafią  obsługiwać duże pliki. Detale te są jednak ignorowane przez aplikacje używające glibc, ponieważ
       jej  funkcje  opakowujące  obsługują  nowsze  wywołania  systemowe,  gdy  tylko  są  dostępne,  w  sposób
       przezroczysty.

UWAGI

       ftruncate() można użyć również do ustawienia rozmiaru obiektu pamięci dzielonej POSIX; zob. shm_open(3).

USTERKI

       Błąd  w  pliku  nagłówka  w  glibc  2.12  powodował,  że  minimalną wartością _POSIX_C_SOURCE wymaganą do
       ujawnienia deklaracji ftruncate() była 200809L zamiast  200112L.  Poprawiono  to  w  następnych  wersjach
       glibc.

ZOBACZ TAKŻE

       truncate(1), open(2), stat(2), path_resolution(7)

TŁUMACZENIE

       Autorami    polskiego    tłumaczenia   niniejszej   strony   podręcznika   są:   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⟩.