Grundlegendes zu undefiniertem Verhalten für einen Binärdatenstrom mithilfe von fseek (file, 0, SEEK_END) mit einer Datei

Die C-Spezifikation hat eine interessante Fußnote (# 268 C11dr §7.21.3 9)

Msgstr "Den Dateipositionsindikator auf Dateiende setzen, wie beifseek(file, 0, SEEK_END)hat undefiniertes Verhalten für einen binären Stream (wegen möglicher nachfolgender Nullzeichen) oder für jeden Stream mit zustandsabhängiger Codierung, der nicht sicher im anfänglichen Verschiebungszustand endet. "

Gilt dies jemals für Binärströme, die eine Datei lesen? (wie von einem physischen Gerät)

IMO, eine Binärdatei auf einer Festplatte, ist nur ein Meer von Bytes. Mir scheint, dass eine Binärdatei keine zustandsabhängige Codierung haben kann, da es sich um eine handeltbinär Datei. Ich bin verwirrt über das Konzept der "binären, breit orientierten Streams" und ob das überhaupt für Festplatten-E / A gelten könnte.

Ich sehe diese Berufungfseek(file, 0, SEEK_END) auf einem seriellen Stream wie einem COM-Port oder vielleichtstdin kann nicht zum wahren ende als dieEnde steht noch nicht fest. So die Eingrenzung der Frage auf physische Dateien.

[bearbeiten] Antwort: Ein Anliegen mit älteren (vielleicht bis Ende der 1980er Jahre). Derzeit im Jahr 2014, Windows, POSIT-spezifische und nicht exotische andere: kein Problem.

@Shafik Yaghmour bietet eine gute Referenz inHat die Verwendung von fseek und ftell zum Bestimmen der Größe einer Datei eine Sicherheitsanfälligkeit?. Dort wird @Jerry Coffin besprochenCP / M als Binärdateien, die nicht immer eine genaue Länge haben. (128-Byte-Datensätze pro Wiki).

Danke an @Keith Thompson Antwort für das Fleisch der Antwort.

Zusammen erklärt dies den Kommentar der Spezifikation "(wegen möglicher nachfolgender Nullzeichen)".

Antworten auf die Frage(1)

Ihre Antwort auf die Frage