truncate(2)

NUME
truncate, ftruncate - trunchiază un fișier la o lungime specificată

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <unistd.h>

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

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

truncate():
    _XOPEN_SOURCE >= 500
        || /* Începând cu glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
        || /* glibc <= 2.19: */ _BSD_SOURCE

ftruncate():
    _XOPEN_SOURCE >= 500
        || /* începând cu glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
        || /* glibc <= 2.19: */ _BSD_SOURCE

DESCRIERE
Funcțiile truncate() și ftruncate() fac ca fișierul obișnuit numit de path sau la care face referire fd să fie trunchiat la o dimensiune de exact length octeți.

Dacă fișierul a fost anterior mai mare decât această dimensiune, datele suplimentare sunt pierdute. Dacă fișierul a fost anterior mai scurt, acesta este extins, iar partea extinsă este citită ca octeți nuli („\0”).

Indicatorul de poziție al fișierului nu este modificat.

Dacă dimensiunea s-a modificat, câmpurile st_ctime și st_mtime (respectiv, ora ultimei schimbări de stare și ora ultimei modificări; a se vedea inode(7)) pentru fișier sunt actualizate, iar biții de mod set-user-ID și set-group-ID pot fi șterși.

Cu ftruncate(), fișierul trebuie să fie deschis pentru scriere; cu truncate(), fișierul trebuie să poată fi scris.

VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE
Pentru truncate():

EACCES
    Permisiunea de căutare este refuzată pentru o componentă a prefixului rutei, sau fișierul numit nu poate fi scris de către utilizator; (a se vedea și path_resolution(7).)

EFAULT
    Argumentul path indică în afara spațiului de adrese alocat procesului.

EFBIG
    Argumentul length este mai mare decât dimensiunea maximă a fișierului. (XSI)

EINTR
    În timp ce era blocat în așteptarea finalizării, apelul a fost întrerupt de un gestionar de semnal; a se vedea fcntl(2) și signal(7).

EINVAL
    Argumentul length este negativ sau mai mare decât dimensiunea maximă a fișierului.

EIO A apărut o eroare de In/Ieș la actualizarea nodului-i.

EISDIR
    Fișierul numit este un director.

ELOOP
    S-au întâlnit prea multe legături simbolice la conversia numelui de rută.

ENAMETOOLONG
    O componentă a unui nume de rută a depășit 255 de caractere sau un nume de rută întreg a depășit 1023 de caractere.

ENOENT
    Fișierul numit nu există.

ENOTDIR
    O componentă a prefixului de rută nu este un director.

EPERM
    Sistemul de fișiere subiacent nu acceptă extinderea unui fișier dincolo de dimensiunea sa curentă.

EPERM
    Operația a fost împiedicată de o sigilare de fișier; a se vedea fcntl(2).

EROFS
    Fișierul numit se află pe un sistem de fișiere numai-pentru-citire.

ETXTBSY
    Fișierul este un fișier executabil care este în curs de execuție.

Pentru ftruncate() se aplică aceleași erori, dar în loc de lucruri care pot fi greșite cu path, avem acum lucruri care pot fi greșite cu descriptorul de fișier, fd:

EBADF
    descriptor-fișier nu este un descriptor de fișier valid.

EBADF sau EINVAL
    fd nu este deschis pentru scriere.

EINVAL
    fd nu face referire la un fișier obișnuit sau la un obiect de memorie partajată POSIX.

EINVAL sau EBADF
    Descriptorul de fișier fd nu este deschis pentru scriere. POSIX permite, iar aplicațiile portabile ar trebui să gestioneze, ambele erori pentru acest caz; (Linux produce EINVAL).

VERSIUNI
Detaliile din DESCRIERE sunt pentru sistemele compatibile XSI. Pentru sistemele neconforme cu XSI, standardul POSIX permite două comportamente pentru ftruncate() atunci când length depășește lungimea fișierului (rețineți că truncate() nu este specificată deloc într-un astfel de mediu): fie returnarea unei erori, fie extinderea fișierului. Ca majoritatea implementărilor UNIX, Linux respectă cerința XSI atunci când are de-a face cu sisteme de fișiere native. Cu toate acestea, unele sisteme de fișiere non-native nu permit ca truncate() și ftruncate() să fie utilizate pentru a extinde un fișier dincolo de lungimea sa curentă: un exemplu notabil pe Linux este VFAT.

Pe unele arhitecturi pe 32 de biți, semnătura de apelare pentru aceste apeluri de sistem diferă, din motivele descrise în syscall(2).

STANDARDE
POSIX.1-2008.

ISTORIC
POSIX.1-2001, 4.4BSD, SVr4 (a apărut prima dată în 4.2BSD).

Apelurile de sistem originale Linux truncate() și ftruncate() nu au fost concepute pentru a gestiona decalaje de fișiere mari. În consecință, Linux 2.4 a adăugat apelurile de sistem truncate64() și ftruncate64() care gestionează fișiere mari. Cu toate acestea, aceste detalii pot fi ignorate de aplicațiile care utilizează glibc, ale cărui funcții de învăluire utilizează în mod transparent apelurile de sistem mai recente, acolo unde acestea sunt disponibile.

NOTE
ftruncate() poate fi, de asemenea, utilizat pentru a defini dimensiunea unui obiect de memorie partajată POSIX; consultați shm_open(3).

ERORI
O eroare a fișierului de antet în glibc 2.12 însemna că valoarea minimă a _POSIX_C_SOURCE necesară pentru a expune declarația ftruncate() era 200809L în loc de 200112L. Acest lucru a fost remediat în versiunile glibc ulterioare.

CONSULTAȚI ȘI
truncate(1), open(2), stat(2), path_resolution(7)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.