Ich verstehe zwar, dass fpos_t
eine undurchsichtige Art soll durch die fgetpos()
Funktion initialisiert werden, §7.19.9.1 der C99 rationale lautet:Wie kann `fsetpos()` verwendet werden, um "zufälligen Zugriff auf Dateien zu erlauben, die zu groß sind, um mit` fseek() `umzugehen?"
fgetpos
undfsetpos
zu C89 hinzugefügt wurden zufällige Zugriffe auf Dateien ermöglichen, Das sind zu groß, um mitfseek
undftell
umzugehen.
und §7.19.9.2:
Die Notwendigkeit, sowohl Aufzeichnungsposition und die Position innerhalb eines Datensatzes in einem
long
Wert zu codieren, können die Größe von Textdateien beschränken, auf denenfseek
undftell
kann verwendet werden, deutlich kleiner sein als die Größe von Binärdateien....
fgetpos
undfsetpos
wurden mit Dateien umgehen hinzugefügt, die zu groß sind, mitfseek
undftell
zu behandeln.
Dies scheint auf Textdateien (Dateien mit einem mode
ohne die b
Flagge geöffnet), weil einige Implementierungen zwei Positionen (eine Datei Aufzeichnungsposition und eine Aufzeichnung Zeichenposition) speichert, kann erfordern in erster Linie zu konzentrieren, was signifikant verringern könnte der effektive Bereich der Funktionen fseek()
und ftell()
für Text Streams.
Dennoch bin ich ratlos, wie das besonders nützlich für Text-Streams ist, und ich verstehe sicherlich nicht, wie es effektiv für "Direktzugriff" verwendet werden könnte.
es der einzige Weg scheint, ist diese Funktionen tatsächlich zu nutzen, indem jedes Zeichen einer Datei zu lesen und das Caching ihre fgetpos()
d fpos_t
Werte, die Nische am besten scheint, da Sie nicht mit ziemlicher Sicherheit irgendwo in der Nähe LONG_MAX
Zeichen lesen möchten .
Was war der "Ausschuss"? Gibt es eine logische Begründung für C99?
+1, aber IBM Mainframes sind nicht archaischer als ASCII oder POSIX: http://www-03.ibm.com/systems/z/index.html –