truncate(3C) truncate(3C)
NAME
truncate, ftruncate, truncate64, ftruncate64 - Datei auf angegebene
Länge setzen
SYNTAX
#include <unistd.h>
int truncate(const char *path, offt length);
int ftruncate(int fildes, offt length);
int truncate64(const char *path, off64t length);
int ftruncate64(int fildes, off64t length);
BESCHREIBUNG
Durch die Funktion ftruncate() erhält die normale Datei, auf die
fildes verweist, eine Größe von length Bytes.
Durch die Funktion truncate() erhält die normale Datei, die durch path
angegeben ist, eine Größe von length Bytes.
Die Auswirkungen von ftruncate() und truncate() auf andere Dateitypen
sind unbestimmt. Wenn die Datei zuvor größer als length war, gehen
Daten verloren. War die Datei zuvor kürzer als length, werden die
Bytes zwischen der alten und der neuen Länge als Nullen gelesen. Bei
ftruncate() muß die Datei zum Schreiben geöffnet sein; bei truncate()
muß der Prozeß über die Schreiberlaubnis für die Datei verfügen.
Wenn durch die Anforderung die Dateigröße über den für den Prozeß gel-
tenden weichen Grenzwert für die Dateigröße hinausgehen würde, schlägt
der Prozeß fehl, und die Implementierung erzeugt das Signal SIGXFSZ
für den Prozeß.
Diese Funktionen ändern nicht den Datei-Offset für der Datei zugeord-
nete offene Dateideskriptoren. Bei erfolgreicher Ausführung markieren
diese Funktionen die Felder stctime und stmtime der Datei zum Aktua-
lisieren, sofern die Dateigröße geändert wurde. Bei einer normalen
Datei wird möglicherweise auch der Inhalt der Bits SISUID und SISGID
des Dateimodus gelöscht.
Diese Funktionen werden nur auf bereits bestehende Dateien angewendet,
so daß für sie nicht das für creat() geltende Codierungsrisiko
besteht.
Wenn ftruncate() verwendet wird, um die Größe einer Datei zu erhöhen,
gleicht die Semantik der einer Funktion write(), die Nullen in die
Datei schreibt. Damit die Konsistenz mit write() gewährt bleibt,
schlägt die Funktion ftruncate() fehl, wenn die Anforderung über das
Offset-Maximum hinausgeht (auch wenn die Datei durch die Anforderung
verkürzt würde).
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
truncate(3C) truncate(3C)
Es besteht kein funktionaler Unterschied zwischen
truncate()/ftruncate() und truncate64()/ftruncate64(), außer bei der
Interpretation von off64t [siehe lfs(5)].
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
truncate() und ftruncate() schlagen fehl, wenn wenigstens eine der
folgenden Bedingungen erfüllt ist:
EINTR Während der Ausführung von truncate() wurde ein Signal
empfangen.
EINVAL Das Argument length war kleiner als 0.
EFBIG oder EINVAL
Das Argument length war größer als die maximale Datei-
größe.
EIO Beim Lesen vom Dateisystem oder Schreiben auf dieses
trat ein Ein-/Ausgabefehler auf.
truncate() schlägt fehl, wenn zumindest eine der folgenden Bedingungen
erfüllt ist:
EACCES Eine Komponente des Pfadpräfixes darf nicht durchsucht
werden.
EACCES Für die Datei path existiert keine Schreiberlaubnis.
EFAULT path zeigt über den zugewiesenen Adreßbereich des Pro-
zesses hinaus.
EISDIR Die Datei path ist ein Verzeichnis.
ELOOP Beim Auflösen von path traten zu viele symbolische Links
auf.
EMFILE Die maximale Anzahl der erlaubten Dateideskriptoren des
Prozesses wurde erreicht.
EMULTIHOP Teile von path erfordern den Sprung auf mehrere ferne
Rechner, und der Dateisystemtyp erlaubt dies nicht.
ENAMETOOLONG Die Länge einer Komponente aus path überschreitet
NAMEMAX, oder die Länge von path überschreitet
PATHMAX.
ENFILE Es konnte nicht mehr Speicherplatz für die Dateitabelle
des Systems zugewiesen werden.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
truncate(3C) truncate(3C)
ENOENT Entweder existiert eine Komponente des Pfadpräfixes
nicht, oder die Datei path existiert nicht.
ENOLINK path zeigt auf einen fernen Rechner, und der Link auf
diesen Rechner ist nicht mehr aktiv.
ENOTDIR Eine Komponente des Pfadpräfixes aus path ist kein Ver-
zeichnis.
EROFS Die Datei, auf die path verweist, befindet sich in einem
schreibgeschützten Dateisystem.
ETXTBSY Die Datei, auf die path verweist, ist eine reine Proze-
durdatei (gemeinsam benutzter Text), die ausgeführt
wird.
ftruncate() schlägt fehlt, wenn wenigstens eine der folgenden Bedin-
gungen erfüllt ist:
EAGAIN Die Datei existiert, logische Datei-/Satzsperren sind
gesetzt, und es liegen noch ausstehende Satzsperren für
die Datei vor [siehe chmod(2)].
EBADF oder EINVAL
fildes ist kein Dateideskriptor, der zum Schreiben
geöffnet ist.
EFBIG Die Datei ist eine reguläre Datei, und die Länge über-
schreitet das Offset-Maximum, das in der fildes zugeord-
neten internen Beschreibung der offenen Datei festgelegt
ist.
ENOLINK fildes zeigt auf einen fernen Rechner, und der Link auf
diesen Rechner ist nicht mehr aktiv.
EINVAL Das Argument fildes verweist auf eine Datei, die ohne
Schreiberlaubnis geöffnet wurde.
Die Funktion truncate() kann bei folgender Bedingung fehlschlagen:
ENAMETOOLONG Die Auflösung des Pfadnamens eines symbolischen Links
hat ein Zwischenergebnis erzeugt, dessen Länge PATHMAX
überschreitet.
ERGEBNIS
Nach erfolgreicher Ausführung wird 0 zurückgegeben. Ansonsten wird -1
zurückgeliefert und errno gesetzt, um den Fehler anzuzeigen.
SIEHE AUCH
fcntl(2), open(2), unistd(4), lfs(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98