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