truncate(2) | System Calls Manual | truncate(2) |
truncate, ftruncate - eine Datei auf eine bestimmte Länge verkürzen
Standard-C-Bibliothek (libc, -lc)
#include <unistd.h>
int truncate(const char *Pfad, off_t Länge); int ftruncate(int dd, off_t Länge);
Für truncate():
_XOPEN_SOURCE >= 500 || /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || /* Glibc <= 2.19: */ _BSD_SOURCE
Für ftruncate():
_XOPEN_SOURCE >= 500 || /* Seit Glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L || /* Glibc <= 2.19: */ _BSD_SOURCE
Die Funktionen truncate() und ftruncate() bewirken, dass die reguläre Datei, die durch Pfad oder dd angegeben ist, auf eine Größe von exakt Länge Byte verkürzt wird.
Falls die Datei vorher größer war, geht ein Teil der Daten verloren. Falls die Datei vorher kleiner war, wird sie vergrößert und der zusätzliche Teil wird als Nullbytes (»\0«) gelesen.
Der Datei-Offset wird nicht geändert.
Wenn die Größe geändert wurde, werden die Felder st_ctime und st_mtime (die Zeit der letzten Zustandsänderung und die Zeit der Modifikation; siehe inode(7)) für die Datei aktualisiert; die Modus-Bits Set-User-ID und Set-Group-ID können gelöscht werden.
Für ftruncate() muss die Datei zum Schreiben geöffnet sein, für truncate() muss die Datei schreibbar sein.
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.
Für truncate():
Für ftruncate() gelten die gleichen Fehlermeldungen. Anstelle von Dingen, die mit Pfad schieflaufen können, gibt es jetzt Dinge, die mit dem Dateideskriptor dd schiefgehen können:
POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (diese Systemaufrufe traten zuerst in BSD 4.2 auf).
ftruncate() kann auch dazu verwandt werden, die Größe eines gemeinsam benutzten POSIX-Speicherobjektes zu setzen; siehe shm_open(3).
Die BESCHREIBUNG oben ist für XSI-konforme Systeme gedacht. Für nicht XSI-konforme Systeme erlaubt der POSIX-Standard zweierlei Verhalten von ftruncate, wenn Länge größer ist als die Dateilänge (beachten Sie, dass truncate für eine derartige Umgebung nicht spezifiziert ist): entweder wird ein Fehler zurückgeliefert oder die Datei wird vergrößert. 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 über ihre aktuelle Größe hinweg zu erweitern. Ein namhaftes Beispiel für Linux ist VFAT.
Die ursprünglichen Linux-Systemaufrufe truncate() und ftruncate() wurden nicht entwickelt, um große Datei-Offsets zu behandeln. Folglich fügte Linux 2.4 die Systemaufrufe truncate64() und ftruncate64() für die Bearbeitung sehr großer Dateien hinzu. Allerdings können diese Details von Anwendungen ignoriert werden, welche die Glibc nutzen. Deren Wrapper-Funktionen verwenden die neueren Systemaufrufe transparent, wenn diese verfügbar sind.
Auf einigen 32-Bit-Architekturen unterscheidet sich die Aufrufsignatur dieser Systemaufrufe. Die Gründe sind in syscall(2) beschrieben.
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 späteren Versionen der Glibc behoben.
truncate(1), open(2), stat(2), path_resolution(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Dennis Stampfer <kontakt@dstampfer.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Helge Kreutzmann <debian@helgefjell.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.
5. Februar 2023 | Linux man-pages 6.03 |