Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ fseek(3S) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

lseek(2)

write(2)

fopen(3S)

popen(3S)

stdio(3S)

ungetc(3S)

unistd(4)

lfs(5)

stdio(5)

fseek(3S)                                                         fseek(3S)

NAME
     fseek, rewind, ftell, fseeko, fseeko64, ftello, ftello64 - Schreib-
     /Lesezeiger eines Streams neu positionieren

SYNTAX
     #include <stdio.h>

     int fseek(FILE *stream, long int offset, int ptrname);

     void rewind(FILE *stream);

     long int ftell(FILE *stream);

     int fseeko(FILE *stream, offt offset, int whence);

     int fseeko64(FILE *stream, off64t offset, int whence);

     offt ftello(FILE *stream);

     off64t ftello64(FILE *stream);

BESCHREIBUNG
     fseek() setzt die Position der nächsten Ein- oder Ausgabeoperation in
     stream. Die neue Position ist offset Bytes (mit Vorzeichen) entfernt
     vom Anfang der Datei, von der momentanen Position oder vom Dateiende,
     je nachdem, ob ptrname den Wert SEEKSET, SEEKCUR oder SEEKEND hat.
     Diese Werte sind in stdio.h wie folgt definiert:

     SEEKSET    Setzt die Position auf offset.

     SEEKCUR    Setzt die Position auf die momentane Position plus offset.

     SEEKEND    Setzt die Position auf EOF plus offset.

     Wenn Ein-/Ausgabefunktionen für Wide-Characters auf stream angewendet
     werden sollen, muß offset entweder 0 oder der Rückgabewert eines vor-
     hergehenden ftell()-Aufrufs in stream sein, und ptrname muß SEEKSET
     sein.

     Mit fseek() kann der Schreib-/Lesezeiger hinter das Ende der Daten in
     der Datei gesetzt werden. Wenn später an diesen Ort Daten geschrieben
     werden, liefern aufeinanderfolgende Lesevorgänge in der Lücke solange
     0, bis Daten in die Lücke geschrieben werden.

     rewind(stream) ist identisch mit (void) fseek(stream, 0L, SEEKSET);

     mit der Ausnahme, daß rewind() auch die Fehleranzeige von stream
     löscht.

     fseek() und rewind() löschen die EOF-Anzeige und machen die Wirkung
     von ungetc() auf stream rückgängig.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

fseek(3S)                                                         fseek(3S)

     Nach fseek() oder rewind() kann die nächste Operation an einer geöff-
     neten Datei, welche aktualisiert wird, entweder Ein- oder Ausgabe
     sein.

     Wenn stream beschreibbar ist und keine gepufferten Daten in die
     zugrundeliegende Datei geschrieben worden sind, bewirken fseek() und
     rewind(), daß die noch nicht geschriebenen Daten in die Datei
     geschrieben werden.

     ftell() gibt den Offset des aktuellen Bytes zurück, und zwar relativ
     zum Anfang der Datei, der der angegebene stream zugeordnet ist.

     Die Funktionen fseeko() und ftello() entsprechen den modifizierten
     Funktionen fseek() und ftell(), mit der Ausnahme, daß das Offset-
     Argument den Typ offt hat und der Fehler EOVERFLOW sich geändert hat.

     fseeko() und ftello() sind erforderlich, da fseek() und ftell() durch
     den Offset-Typ long für ISO C eingeschränkt sind.

     Es besteht kein funktionaler Unterschied zwischen fseeko()/ftello()
     und fseeko64()/ftello64(), 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).

     fseek() schlägt bei folgenden Bedingungen fehl:

     EAGAIN      Für den Dateideskriptor ist das ONONBLOCK-Flag gesetzt,
                 und der Prozeß wird beim Schreiben verzögert.

     EBADF       Der Dateideskriptor, der sich auf stream bezieht, ist
                 nicht zum Schreiben geöffnet, oder der Stream-Puffer muß
                 bereinigt werden, und die Datei ist nicht geöffnet.

     EFBIG       Es wurde versucht, in eine Datei zu schreiben, wobei die
                 maximale Dateigröße oder das Prozeßlimit für die Datei-
                 größe überschritten wurde.

     EFBIG       Die Datei ist eine reguläre Datei, und es wurde versucht,
                 Daten am oder über das Offset-Maximum hinaus zu schreiben,
                 das dem zugehörigen Stream zugeordnet ist.

     EINTR       Das Schreiben wurde durch den Empfang eines Signals unter-
                 brochen, und es wurden keine Daten übertragen.

     EINVAL      ptrname ist ein ungültiges Argument. Der sich hieraus
                 ergebende Dateipositionsanzeiger würde auf einen negativen
                 Wert gesetzt.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

fseek(3S)                                                         fseek(3S)

     EIO         Ein physischer Ein-/Ausgabefehler ist aufgetreten, oder
                 der Prozeß gehört zu einer Prozeßgruppe im Hintergrund und
                 versucht, auf sein Steuerungsterminal zu schreiben. TOSTOP
                 ist gesetzt, SIGTTOU wird vom Prozeß weder ignoriert noch
                 blockiert, und die Prozeßgruppe des Prozesses ist ver-
                 waist. Dieser Fehler kann auch abhängig von der jeweiligen
                 Implementierung auftreten.

     ENOSPC      Es ist kein freier Platz auf dem Datenträger mehr vorhanden.

     EPIPE       Der Dateideskriptor von stream ist mit einer Pipe oder
                 FIFO zugeordnet.

     EPIPE       Es wurde versucht, in eine Pipe oder FIFO zu schreiben,
                 die für keinen Prozeß zum Lesen geöffnet ist. Ein
                 SIGPIPE-Signal wird an den Prozeß gesendet.

     ENXIO       Das Gerät existiert nicht, oder auf das Gerät kann nicht
                 zugegriffen werden.

     EOVERFLOW   Der resultierende Datei-Offset würde ein Wert sein, der in
                 einem Objekt des Typs long nicht korrekt dargestellt wer-
                 den kann.

     fseeko() und ftello() schlagen bei folgenden Bedingungen fehl:

     EOVERFLOW   Der aktuelle Datei-Offset kann in einem Objekt des Typs
                 offt nicht korrekt dargestellt werden.

ERGEBNIS
     fseek() gibt bei ungültigem Positionieren -1 zurück, ansonsten Null.
     Ungültiges Positionieren kann beispielsweise ein fseek() auf eine
     Datei sein, die nicht über fopen() geöffnet wurde; insbesondere darf
     fseek() nicht für ein Terminal oder für eine Datei verwendet werden,
     die über popen(3S) geöffnet wurde. Nachdem ein Stream geschlossen
     wurde, sind keine weiteren Operationen auf diesem Stream definiert.

HINWEISE
     Obwohl im Reliant UNIX-System ein von ftell() zurückgegebener Offset
     in Bytes gemessen wird und es zulässig ist, relativ zu diesem Offset
     zu positionieren, erfordert die Portabilität auf andere Systeme, daß
     fseek() einen direkten Offset erhält. Arithmetische Operationen an
     einem Nicht-Reliant UNIX-Offset, der nicht unbedingt in Bytes gemessen
     wird, können nicht immer sinnvoll ausgeführt werden.

     Anwendungen, die die Schnittstellen fseeko() und ftello() verwenden,
     sollten LARGEFILESOURCE als 1 definieren, die Datei <unistd.h> ein-
     binden und anschließend prüfen, ob LFSLARGEFILE gleich 1 ist, um
     festzustellen, ob die zusätzliche Funktionalität auch tatsächlich ver-
     fügbar ist. Diese zusätzliche Funktionalität kann zwar auch verfügbar
     sein, wenn LARGEFILESOURCE nicht definiert ist, jedoch nicht für
     Programme, die die X/Open-Standards erfüllen.


Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

fseek(3S)                                                         fseek(3S)

SIEHE AUCH
     lseek(2), write(2), fopen(3S), popen(3S), stdio(3S), ungetc(3S),
     unistd(4), lfs(5), stdio(5).



















































Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026