truncate(2) System Calls Manual truncate(2) NAZWA truncate, ftruncate - ustawia dlugosc pliku BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include 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() powoduja, ze zwykly plik nazwany za pomoca path lub do ktorego odnosi sie fd, jest docinany do dlugosci dokladnie length bajtow. Jesli plik byl wczesniej wiekszy od tego rozmiaru, dodatkowe dane sa tracone. Jesli plik byl wczesniej mniejszy, jest powiekszany, a odczyt z nowej czesci zwroci bajty null (,,\0"). Przesuniecie pliku nie ulega zmianie. Jesli rozmiar pliku sie zmieni, aktualizowane sa 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 moga byc wyczyszczone. Przy ftruncate(), plik musi byc otwarty do odczytu; przy truncate(), plik musi byc zapisywalny. WARTOSC ZWRACANA Po pomyslnym zakonczeniu zwracane jest zero. Po bledzie zwracane jest -1 i ustawiane errno, wskazujac blad. BLEDY Dla truncate(): EACCES Brak praw do przeszukiwania na skladowej sciezki lub nazwany plik nie jest zapisywalny przez uzytkownika (zob. tez path_resolution(7)) EFAULT Argument path wskazuje poza przydzielona procesowi przestrzen adresowa. EFBIG Argument length jest wiekszy, niz maksymalny rozmiar pliku. (XSI) EINTR Wywolanie zostalo przerwane przez procedure obslugi sygnalu, w trakcie zablokowania w oczekiwaniu na ukonczenie; zob. fcntl(2) i signal(7). EINVAL Argument length jest ujemny lub wiekszy, niz maksymalny rozmiar pliku. EIO Podczas aktualizacji i-wezla wystapil blad wejscia/wyjscia. EISDIR Wskazana nazwa pliku jest nazwa katalogu. ELOOP Natrafiono na zbyt wiele dowiazan symbolicznych podczas tlumaczenia sciezki. ENAMETOOLONG Skladowa sciezki przekroczyla 255 znakow lub cala sciezka przekroczyla 1023 znakow. ENOENT Plik wskazywany przez nazwe nie istnieje. ENOTDIR Skladowa sciezki nie jest katalogiem. EPERM System plikow nie obsluguje powiekszenia pliku poza jego aktualny rozmiar. EPERM Operacja zablokowana, z powodu zapieczetowania pliku (ang. file seal); zob. fcntl(2). EROFS Podany plik znajduje sie na systemie plikow przeznaczonym tylko do odczytu. ETXTBSY Plik jest plikiem wykonywalnym, ktory jest obecnie wykonywany. W przypadku ftruncate() stosuja sie te same bledy, lecz zamiast nieprawidlowosci dotyczacych sciezki path, tu bledy beda dotyczyc deskryptora pliku fd: EBADF fd nie jest prawidlowym deskryptorem pliku. EBADF lub EINVAL fd nie jest otwarty do zapisu. EINVAL fd nie wskazuje na zwykly plik lub obiekt pamieci dzielonej POSIX. EINVAL lub EBADF Deskryptor pliku fd nie jest otwarty do zapisu. POSIX zezwala na, a przenosne aplikacje powinny obslugiwac, oba bledy w tym przypadku (bledem w Linuksie jest EINVAL). WERSJE Detale w OPISIE dotycza systemow zgodnych z XSI. W systemach, ktore nie sa zgodne z XSI, standard POSIX zezwala na dwa typy zachowan w przypadku ftruncate(), gdy length przekracza dlugosc pliku (prosze zauwazyc, ze truncate() w ogole nie jest wspomniane w takim srodowisku): albo zwrocenie bledu, albo zwiekszenie pliku. Podobnie jak wiekszosc implementacji Uniksa, Linux podaza za wymaganiem XSI na natywnych systemach plikow. Jednak niektore nierodzime systemy plikow nie zezwalaja na uzywanie truncate() i ftruncate() do zwiekszenia pliku poza jego aktualna dlugosc: istotnym przykladem w Linuksie jest tu VFAT. Na niektorych architekturach 32-bitowych, sygnatura wywolania dla tych wywolan systemowych moze byc zroznicowana, z powodow opisanych w syscall(2). STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, 4.4BSD, SVr4 (first appeared in 4.2BSD). Pierwotne linuksowe wywolania truncate() i ftruncate() nie byly zaprojektowane do obslugi przesuniec duzych plikow. W konsekwencji, Linux 2.4 dodal wywolania systemowe truncate64() i ftruncate64(), ktore potrafia obslugiwac duze pliki. Detale te sa jednak ignorowane przez aplikacje uzywajace glibc, poniewaz jej funkcje opakowujace obsluguja nowsze wywolania systemowe, gdy tylko sa dostepne, w sposob przezroczysty. UWAGI ftruncate() mozna uzyc rowniez do ustawienia rozmiaru obiektu pamieci dzielonej POSIX; zob. shm_open(3). USTERKI Blad w pliku naglowka w glibc 2.12 powodowal, ze minimalna wartoscia _POSIX_C_SOURCE wymagana do ujawnienia deklaracji ftruncate() byla 200809L zamiast 200112L. Poprawiono to w nastepnych wersjach glibc. ZOBACZ TAKZE truncate(1), open(2), stat(2), path_resolution(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. truncate(2)