Provided by: manpages-pl-dev_4.26.0-1_all 

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 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.9.1 15 czerwca 2024 r. truncate(2)