web-dev-qa-db-ja.com

EOTとEOFの違い

EOTがASCIIコード4であるのに対し、EOFは-1としてエンコードされていることを理解しています(少なくともCでは)。 EOFが-1にマップされていることに気づく前に、これはEOTの同義語だと思っていました。 EOFがEOTではなく-1にマップされるのはなぜですか?私の知る限り、どちらも同じことを行います。つまり、ファイルストリームを終了します。私が識別できる唯一の違いは、EOTがbashシェルのコマンドも終了することです。これら2つのコードの正確な技術的な違いについて説明したいと思います。

5
user628544

一般に、EOFは文字ではなく、文字がないことです。

プログラムが標準設定の標準モードの端末で実行される場合(つまり、stdioを使用するプレーンなCプログラム)、ASCII文字EOTは表示されません。端末ドライバーはその文字を認識し、 EOF条件(低レベルではread()からの0の戻り値です)を作成します。stdioライブラリは、EOF条件を変換します問題の関数に適切な戻り値(getchar()EOFマクロ、fgets()のnullポインターなど)

EOFマクロの数値は、Cライブラリ以外には関係ありません。また、EOF条件の意味の理解に影響を与えることはありません。

5
user41515

CのコンテキストでのEOFは、ファイルに表示できないものです。 EOTはASCII文字で、これまでメッセージの終わりを示していました(UNIX端末ではストリームの終わりを意味する特殊文字ですユーザーに表示されたとき)入力のみ)、しかしそれはファイルに現れることができるので、それをCで使用してファイルの終わりを知らせることは、バイナリファイルを読むときにひどい考えになるでしょう!

1
Muzer

EOTは、シリアルデバイスで使用される多数の制御文字の1つです。シリアルラインを介したデータの送信または紙テープのようなシリアルソースへのファイルの保存に関連する他の多くの制御文字があります。これらには、SOH、STX、ETX、FS、RS、GS、およびUSなどの文字が含まれます。追加の制御文字は、伝送制御とエラー訂正に使用されます。

シリアル接続では、EOT(伝送終了)文字は伝送を終了したいことを示します。シリアル接続は通常、ファイルドライバを使用してアクセスされます。シリアル伝送が終了すると、ファイルドライバーはこれをEOF(ファイルの終わり)状態として報告します。

EOFは文字ではありません。 getchar()は整数を返します。有効な文字のwhileの値は0〜255です。-1の値は、Unix/Linuxでfalse /無効/失敗インジケータとしてよく使用されます。 (実際には0以外の値です。成功しない理由はいくつもありますが、通常は1つの成功ケースのみです。)getchar()が-1を返す場合、明らかに文字を返しません。ただし、出力をバイトに格納する場合、EOFとDEL(削除)文字を区別することはできません。

0
BillThor