6

EOFRuby でシンボルを文字列に書き込むプラットフォームに依存しない方法はありますか。* nixではシンボルは だと思います^Dが、Windowsでは です^Z。それが私が尋ねる理由です。

4

2 に答える 2

17

EOF は文字ではなく、状態です。端末は、制御文字を使用してこの状態 (Cd) を表します。「EOF文字の読み取り」と同じことはありません。ファイルに書き込んでいる場合は、完了したら閉じてください。このメーリング リストの投稿を参照してください。

EOF を、ファイルの終わりを示すバンド内の特殊文字値と考えているようです。帯域外のセンチネル値と考えたほうがよいでしょう。C では、EOF は通常 -1 であり、関連付けられた API は整数の戻り値を指定するため、EOF は有効な帯域内の値と混同されないことが保証されます。

ここにいくつかの証拠があります(Unixでこれを行ってください):

$ cat > file
hello^V^Dworld
^D
$ cat file
helloworld

^V^D と入力すると、コントロール D 文字がそのままファイルに挿入されます。world と入力した後、^D はパイプを閉じます。ファイルは最終的に 12 バイトの長さ 10 文字で、^D と改行のためにさらに 2 文字あります。最後の ^D はファイルに収まりません。ターミナル/シェルがパイプを閉じるために使用するだけです。

于 2009-07-04T02:27:14.783 に答える
5

通常、EOF 文字はありません。つまり、これに対するクロスプラットフォームのソリューションはなく、特定のプラットフォームでさえ、そのようなキャラクターの処理は純粋にレガシーで一貫性がありません。ファイルを閉じることでファイルを終了します。

ただし、特定のオペレーティング システムでは、特定のモードでファイルを読み取るときに、文字通りのファイル終了文字がサポートされています。たとえば、Windows で実行していて、C stdio API を使用してファイルをテキスト モードで読み取る場合、リテラルの control-Z (文字コード 26) はファイルの終わりを stdio に通知します。これは、CP/M からのホールドオーバーとして持っている MS-DOS からのホールドオーバーです。stdio を使用してバイナリモードでファイルを読み取る場合、control-Z はファイルを終了しません。

とはいえ、「知っていて使わない」機能と考えてください。Windows で切り捨てられた入力/出力が見られる場合は、それについて知りたいと思うでしょうが、それを使用するのは狂気です。

于 2009-07-04T06:56:17.833 に答える