ファイルの最後の文字は何ですか?

ファイルの最後の文字は何ですか?

私は次の質問に対する答えを読んだ。ファイルの末尾から改行を削除みんな最後の文字を削除します。私の質問はeof文字が最後の文字ではありませんか?

答え1

ASCII制御文字の定義は1960年代から始まります(実際に文字だと思うよりも前)。ネットワーク)。これらの制御文字の一部は、当時の通信機器に定義された方法で使用されていませんでした。

Unixシリーズシステムでは文字は必要ありませんEOF。システムは、ファイルが何バイトであるかをアプリケーションに通知できます。

  • 他のシステム(VMS、DOS、Windows)には、Control-Zがファイルの終わり表示として機能する可能性があります。年をとるシステムが一部のアプリケーションにファイルに数バイトがあるかどうかは不明なバージョンです。

    VMS の場合、C ランタイムの動作方法により制限が発生します。アセンブリ言語アプリケーションは正しいファイルサイズを取得できます。

  • Unixシステムではシェル通常、control-Dは入力(ファイル)の終わりに達したことをアプリケーションに通知するために使用されますが、control-Dはファイルに保存されません。

CではEOF意図的に作られています。-1有効な文字ではないことを示します。EOFファイル終了条件が検出されると、特殊文字の代わりに標準I / Oが返されます。

ところで、ファイルが次に終わる必要はありません。新しいチーム(ASCII改行)文字.テキストエディタには印刷可能なすべてのテキストがありますが、末尾の改行がないファイルを処理できます。

答え2

以前の回答で正しく指摘したように、ファイルはファイルの終わり文字で終わりません。しかし、答えとコメントには、指摘する価値があるいくつかの不正確さが含まれていると思います。

  • ASCII 文字セットには正確な EOF 文字が含まれていません。さまざまな「終了」制御文字があります。テキスト終了(3)、転送終了(4)、転送ブロック終了(23)、メディア終了(25)。ファイル区切り記号(28)はおそらくEOF文字に最も近いです。コード26はEOFではなく「交換」です。

  • Ctrl-D端子入力専用です。たとえば、このコマンドには-はcat filea fileb filec > outfile含まれません。ただし、このコマンドを使用して、端末EOF文字を-以外の文字に変更できます。CtrlDCtrlDstty

  • 厳密に言えば、Ctrl- D(または何に変更しても)はEOFキーコードではありません。その目的は、returnreadキーを押すと、読み取りシステム呼び出しが呼び出し元に1行の文字を返すのと同じように、システム呼び出しが使用可能な入力を返すことです。慣例によると読み取りシステム呼び出しの戻り値0(つまり、読み取り文字が0の場合)は、ファイルの終了条件を表します。ただし、入力ファイルは自動的に閉じられず、入力が端末から来た場合、「ファイルの終わり」状態にはなりません。 「ファイルの終わり」の後でも、端末から読み続けるプログラムを書くことができ、読み取り呼び出しは入力の次の行にゼロ以外の値を返すことがあります。

  • Ctrleofとeol文字の間の類似点は、行にいくつかの入力が書き込まれたときに-を押すと表示されます。Dたとえば、「abc」を書き、キーを押すと読み取り呼び出しが返され、Ctrl今回Dは値3が返され、「abc」は引数として渡されたバッファに格納されます。読み出しはゼロを返さないので、上記の規則に従ってEOF条件として解釈されません。同様に、returnキーを押すと、読み取り呼び出しは入力行全体(新しい行を含む)を返します。次のコマンドを使用してこれを試すことができますcat。行に文字を書き、Ctrl-を押しますD。文字が再び反響することを確認し、追加のcat入力を待ちます。

  • 上記のすべては、ライン入力処理が最小限に抑えられる「raw」モードではなく、「cooked」モードの端末にのみ適用されます。 raw モードでは、Ctrl-D 文字が実際に入力バッファに渡されます。

答え3

EOFは文字ではありません。これは、ファイルストリームから文字が読み取れなくなったことを示す状態です。端末でEOFコマンドを入力すると、特殊文字を入力するのではなく、オペレーティングシステムに入力ストリームを閉じるように信号を送信します。

関連情報