truncate(2) System Calls Manual truncate(2) BEZEICHNUNG truncate, ftruncate - eine Datei auf eine bestimmte Lange verkurzen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int truncate(const char *Pfad, off_t Lange); int ftruncate(int dd, off_t Lange); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): Fur truncate(): _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || /* Glibc <= 2.19: */ _BSD_SOURCE Fur ftruncate(): _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L || /* Glibc <= 2.19: */ _BSD_SOURCE BESCHREIBUNG Die Funktionen truncate() und ftruncate() bewirken, dass die regulare Datei, die durch Pfad oder dd angegeben ist, auf eine Grosse von exakt Lange Byte verkurzt wird. Falls die Datei vorher grosser war, geht ein Teil der Daten verloren. Falls die Datei vorher kleiner war, wird sie vergrossert und der zusatzliche Teil wird als Nullbytes (>>\0<<) gelesen. Der Datei-Offset wird nicht geandert. Wenn die Grosse geandert wurde, werden die Felder st_ctime und st_mtime (die Zeit der letzten Zustandsanderung und die Zeit der Modifikation; siehe inode(7)) fur die Datei aktualisiert; die Modus-Bits Set-User-ID und Set-Group-ID konnen geloscht werden. Fur ftruncate() muss die Datei zum Schreiben geoffnet sein, fur truncate() muss die Datei schreibbar sein. RUCKGABEWERT Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER Fur truncate(): EACCES Eine Komponente des Pfad-Prafix darf nicht durchsucht werden oder die benannte Datei kann vom Benutzer nicht geschrieben werden (siehe auch path_resolution(7).) EFAULT Das Argument Pfad zeigt aus dem dem Prozess zugewiesenen Adressraum heraus. EFBIG Das Argument Lange ist grosser als die maximale Dateigrosse. (XSI) EINTR Der Aufruf wurde von einem Signal-Handler unterbrochen, wahrend er auf den Abschluss wartete (siehe fcntl(2) und signal(7)). EINVAL Das Argument Lange ist negativ oder grosser als die maximale Dateigrosse. EIO Bei der Aktualisierung des Inodes trat ein E/A-Fehler auf. EISDIR Die angegebene Datei ist ein Verzeichnis. ELOOP Beim Ubersetzen des Pfadnamens wurden zu viele symbolische Links vorgefunden. ENAMETOOLONG Ein Teil eines Pfades ist grosser als 255 Zeichen oder ein kompletter Pfadname uberschreitet eine Grosse von 1023 Zeichen. ENOENT Die angegebene Datei existiert nicht. ENOTDIR Eine Komponente des Pfad-Prafixes ist kein Verzeichnis. EPERM Das unterliegende Dateisystem erlaubt keine Vergrosserung der Datei uber ihre aktuelle Grosse hinaus. EPERM Die Aktion wurde durch eine Dateiversiegelung verhindert; siehe fcntl(2). EROFS Die angegebene Datei befindet sich auf einem nur lesbaren (read-only) Dateisystem. ETXTBSY Die Datei ist eine ausfuhrbare Datei, die ausgefuhrt wird. Fur ftruncate() gelten die gleichen Fehlermeldungen. Anstelle von Dingen, die mit Pfad schieflaufen konnen, gibt es jetzt Dinge, die mit dem Dateideskriptor dd schiefgehen konnen: EBADF dd ist kein zulassiger Dateideskriptor. EBADF oder EINVAL dd ist nicht zum Schreiben geoffnet. EINVAL dd referenziert keine regulare Datei oder ein gemeinsam benutztes POSIX-Speicherobjekt. EINVAL oder EBADF Der Dateideskriptor dd ist nicht zum Schreiben offen. POSIX erlaubt beide Fehler fur diesen Fall und portable Anwendungen sollten damit umgehen konnen. (Linux erzeugt EINVAL.) VERSIONEN Die BESCHREIBUNG oben ist fur XSI-konforme Systeme gedacht. Fur nicht XSI-konforme Systeme erlaubt der POSIX-Standard zweierlei Verhalten von ftruncate, wenn Lange grosser ist als die Dateilange (beachten Sie, dass truncate fur eine derartige Umgebung nicht spezifiziert ist): entweder wird ein Fehler zuruckgeliefert oder die Datei wird vergrossert. Wie die meisten Unix-Implementierungen folgt Linux der XSI-Forderung, wenn es sich mit nativen Dateisystemen befasst. Aber einige nicht native Dateisysteme gestatten die Verwendung von truncate() und ftruncate() nicht, um eine Datei uber ihre aktuelle Grosse hinweg zu erweitern. Ein namhaftes Beispiel fur Linux ist VFAT. Auf einigen 32-Bit-Architekturen unterscheidet sich die Aufrufsignatur dieser Systemaufrufe. Die Grunde sind in syscall(2) beschrieben. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, 4.4BSD, SVr4 (erschien zuerst in 4.2BSD). Die ursprunglichen Linux-Systemaufrufe truncate() und ftruncate() wurden nicht entwickelt, um grosse Datei-Offsets zu behandeln. Folglich fugte Linux 2.4 die Systemaufrufe truncate64() und ftruncate64() fur die Bearbeitung sehr grosser Dateien hinzu. Allerdings konnen diese Details von Anwendungen ignoriert werden, welche die Glibc nutzen. Deren Wrapper-Funktionen verwenden die neueren Systemaufrufe transparent, wenn diese verfugbar sind. ANMERKUNGEN ftruncate() kann auch dazu verwandt werden, die Grosse eines gemeinsam benutzten POSIX-Speicherobjektes zu setzen; siehe shm_open(3). FEHLER Ein Fehler der Header-Dateien von Glibc 2.12 hatte zur Folge, dass der erforderliche Minimalwert von _POSIX_C_SOURCE zur Bereitstellung der Deklaration von ftruncate() 200809L war anstatt 200112L. Der Fehler ist in spateren Versionen der Glibc behoben. SIEHE AUCH truncate(1), open(2), stat(2), path_resolution(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Dennis Stampfer , Martin Eberhard Schauer , Helge Kreutzmann und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 truncate(2)