私は2つの違いを理解しているので、それに入る必要はありませんが、Windowsが改行を示すためにCRとLFの両方を使用する理由の背後にある理由が何であるか疑問に思っています。Linuxの方法(LFを使用するだけ)は、はるかに理にかなっており、スペースを節約し、解析が簡単なようです。
私は2つの違いを理解しているので、それに入る必要はありませんが、Windowsが改行を示すためにCRとLFの両方を使用する理由の背後にある理由が何であるか疑問に思っています。Linuxの方法(LFを使用するだけ)は、はるかに理にかなっており、スペースを節約し、解析が簡単なようです。
回答:
歴史的に使用するとき ドットマトリックスプリンター テレタイプCRはキャリッジをラインの最初の位置に戻し、LFは次のラインにフィードします。ファイル自体にCR + LFを使用すると、プリンタードライバーを一切使用せずに、ファイルを直接プリンターに送信できます。
ドットマトリックスプリンターではなくテレタイプであると指摘してくれた@zaphに感謝します
@sshanninはRaymondChenのブログからURLを投稿しましたが、機能しなくなりました。ブログの内部ソフトウェアが変更されたため、URLが変更されました。
新しいブログの古い投稿をクロールした後、ここで見つけました。
ブログからの引用:
ラインターミネータがCR + LFなのはなぜですか?
このプロトコルは、テレタイプライターの時代にまでさかのぼります。CRは「キャリッジリターン」の略です。CR制御文字は、用紙を進めずにプリントヘッド(「キャリッジ」)を列0に戻しました。LFは「改行」の略です。LF制御文字は、プリントヘッドを動かさずに用紙を1行進めました。したがって、プリントヘッドを列0に戻し(次の行を印刷する準備ができている)、用紙を進める(新しい用紙に印刷する)場合は、CRとLFの両方が必要です。
RFC 0821(SMTP)、RFC 1939(POP)、RFC 2060(IMAP)、RFC 2616(HTTP)などのさまざまなインターネットプロトコルドキュメントにアクセスすると、すべてCR + LFがCR + LFとして指定されていることがわかります。回線終了シーケンス。したがって、本当の問題は「CP / M、MS-DOS、およびWin32がラインターミネータとしてCR + LFを使用するのはなぜですか?」ではありません。むしろ「なぜ他の人々はこれらの標準文書とは異なり、他のラインターミネータを使用することを選択したのですか?」
Unixは、回線終了シーケンスとしてプレーンLFを採用しました。sttyオプションを見ると、onlcrオプションでLFをCR + LFに変更するかどうかが指定されていることがわかります。この設定を間違えると、階段状のテキストが表示されます。
each line begins
前の行が中断したところ。したがって、UNIXでさえ、rawモードのままにすると、行を終了するためにCR + LFが必要になります。LFの前の暗黙のCRは、1行あたり1バイトを節約するため、おそらく経済的なものとして、UNIXの発明です。
C言語のUNIXの祖先は、この規則をC言語標準に取り入れました。これは、行を終了するために「\ n」(LFをエンコードする)のみを必要とし、生のファイルデータを論理行に変換するランタイムライブラリに負担をかけます。
C言語では、「汎用ラインターミネータ」の概念を表すために「改行」という用語も導入されました。1996年頃にASCII委員会が文字0x0Aの名前を「改行」に変更したとのことで、混乱のレベルはさらに高くなっています。
実際のページが利用できなくなったため、この2番目のリンクをThe WaybackMachineのスナップショットに変更しました。
これがあなたの質問に答えることを願っています。
データ転送速度を物理的な印刷速度に合わせるために、1文字ではなく2文字(場合によってはそれ以上)を送信する理由について、複数の説明を見てきました(これはかなり前のことです)。プリントヘッドの移動は、1文字を印刷するよりも時間がかかり、余分な文字を送信することで、データ転送が印刷デバイスより先に進むのを防ぐことができました。したがって、Windowsで行末に複数の文字がある理由は、基本的にQWERTYキーボードがある理由と同じです。これは、処理速度を低下させることを目的としています。
明らかに、この慣性がWindowsで今日まで続いている理由は、継続的な下位互換性の概念に基づいており、最終的には単純な慣性に基づいています。
ただし、この規則は、オペレーティングシステムレベルでWindowsによって厳密に適用されているわけではありません。互換性を持たせようとしている他のアプリケーションに応じて、どのWindowsアプリケーションもこの規則を無視してかまいません。
興味深いことに、「ニューライン」に関するウィキペディアの記事では、Windows8ではLFのみの使用に変更が加えられる可能性があると主張しています。この記事には、Mac OSXがLF + CRからLFのみへの移行を導入したことも記載されています。