14

ftello/fseekofgetpos/はどう違いfsetposますか? どちらも、不透明なオフセットタイプを使用して64ビットオフセットを許可するファイルポインターの取得/設定関数のようです。

それらは異なるプラットフォームまたは異なる標準でサポートされていますか? 使用するオフセットのタイプがより柔軟ですか?

ところで、 fgetpos/fsetpos と ftell/fseek の違いについては知っていますが、これは重複ではありません。その質問は ftell/fseek に関するもので、答えはftello/fseeko には当てはまりません。

4

1 に答える 1

10

違いの詳細については、ポータブル ポジショニングを参照してください。抜粋:

テキスト ストリームがバイナリ ストリームとまったく異なる一部のシステムでは、テキスト ストリームのファイル位置をファイルの先頭からの文字数として表すことができません。たとえば、一部のシステムのファイル位置は、ファイル内のレコード オフセットとレコード内の文字オフセットの両方をエンコードする必要があります。

その結果、プログラムをこれらのシステムに移植できるようにする場合は、特定の規則に従う必要があります。

  • テキスト ストリームで ftell から返される値は、これまでに読み取った文字数と予測可能な関係はありません。信頼できる唯一のことは、後で fseek または fseeko のオフセット引数として使用して、同じファイル位置に戻ることができるということです。
  • テキスト ストリームでの fseek または fseeko の呼び出しでは、オフセットが 0 であるか、または whence が SEEK_SET で、オフセットが同じストリームでの ftell への以前の呼び出しの結果である必要があります。
  • テキスト ストリームのファイル位置インジケータの値は未定義ですが、ungetc で押し戻された文字のうち、読み取られていないか破棄されていない文字があります。未読を参照してください。

簡単に言うと、fgetpos/fsetpos はより柔軟な構造を使用してファイルの位置状態に関する追加のメタデータを格納し、(理論上) 移植性を高めます。

于 2012-08-25T04:33:39.433 に答える