Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Proper understanding of the difference between text mode and binary mode is important when using functions that operate on file streams. (See recommendation FIO14-C. Understand the difference between text mode and binary mode with file streams for more information.)

Wiki MarkupSection 7.19.9.2 of \[ [ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999] \] states the following specific behavior for {{fseek()}} when opening a binary file in binary mode:

A binary stream need not meaningfully support fseek calls with a whence value of SEEK_END.

...

In addition, footnote 234 of Section 7.19.3 of \ [[ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999] \] has this to say:

Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has undefined behavior for a binary stream (because of possible trailing null characters) or for any stream with state-dependent encoding that does not assuredly end in the initial shift state.

Seeking to the end of a binary stream in binary mode with fseek() is not meaningfully supported and, as a result, not a recommended method for computing the size of a file.

Wiki MarkupSection 7.19.9.4 of \[ [ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999] \] states the following specific behavior for ftell() when opening a text file in text mode:

For a text stream, its file position indicator contains unspecified information, usable by the fseek function for returning the file position indicator for the stream to its position at the time of the ftell call.

...