web-dev-qa-db-ja.com

WindowsがCR LFを使用するのはなぜですか?

この2つの違いを理解しているので、その必要はありませんが、WindowsがCRとLFの両方を使用して改行を示す理由の背後にある理由を疑問に思っています。 Linuxの方法(LFを使用する)の方がはるかに理にかなっており、スペースを節約し、解析しやすいようです。

71
Kyle

歴史的に使用する場合 ドットマトリックスプリンター teletypes CRはキャリッジを行の最初の位置に戻しますが、LFは次の行に送ります。ファイル自体でCR + LFを使用すると、プリンタードライバーを一切使用せずに、プリンターに直接ファイルを送信します。

ドットマトリックスプリンターではなくテレタイプであると指摘した@zaphに感謝します

80
Anders Abel

@sshanninがRaymond ChenのブログからURLを投稿しましたが、もう機能しません。ブログの内部ソフトウェアが変更されたため、URLが変更されました。

新しいブログの古い投稿をクロールした後、私はそれを見つけました here

ブログから引用:

ラインターミネータがCR + LFなのはなぜですか?

このプロトコルは、テレタイプライターの時代にまでさかのぼります。 CRは「キャリッジリターン」の略です。CR制御文字は、紙を進めずに列0にプリントヘッド(「キャリッジ」)を戻しました。 LFは「ラインフィード」を表します。LF制御文字は、プリントヘッドを動かさずに用紙を1行進めます。したがって、プリントヘッドを列ゼロ(次の行を印刷する準備ができている)と用紙を進める(新しい用紙に印刷する)には、CRとLFの両方が必要です。

RFC 0821(SMTP)、RFC 1939(POP)、RFC 2060(IMAP)、またはRFC 2616(HTTP)などのさまざまなインターネットプロトコルドキュメントにアクセスすると、CR + LFがすべてとして指定されていることがわかります。回線終了シーケンス。したがって、本当の質問は「なぜCP/M、MS-DOS、およびWin32は行末記号としてCR + LFを使用するのか?」ではなく、「なぜ他の人々はこれらの標準文書とは異なる他の行末記号を使用することを選択したのですか?」 ?」

Unixは、プレーンLFを行終了シーケンスとして採用しました。sttyオプションを見ると、onlcrオプションは、LF CR + LFに変更されました。この設定が間違っていると、階段のテキストが表示されます。

ライン

始まる

前の行が中断したところ。したがって、UNIXでさえ、rawモードのままにすると、行を終了するためにCR + LFが必要です。 LFの前の暗黙的なCRは、1行あたり1バイトを節約するため、おそらく経済としてのunixの発明です。

C言語のUnixの祖先は、この規約をC言語標準に持ち込みました。これは、行を終了するために「\ n」(LFをエンコード)のみを必要とし、ランタイムライブラリに生ファイルデータを論理行に変換する負担をかけます。

C言語では、「一般的な行終端記号」の概念を表すために「改行」という用語も導入されました。 1996年ごろASCII委員会が文字0x0Aの名前を「改行」に変更したため、混乱レベルがさらに高くなったと言われています。

これは、Unixの観点からの主題の別の議論です

実際のページはもう利用できないため、この2番目のリンクをThe Wayback Machineのスナップショットに変更しました。

これがあなたの質問に答えることを願っています。

21
OMA

これは昔のテレタイプマシン(およびタイプライター)から来ています。

以前は、行の入力が終わったら、タイプライターのキャリッジ(紙を保持し、入力したときに左にスライドした)を行の先頭(CR)に戻す必要がありました。次に、次の行に移動するために、紙を行(LF)に進める必要がありました。

ダッシュを使用して文字を打ち消す場合(単に上書きする場合など)、キャリッジを返すときに改行したくない場合があります。

しかし、基本的には、慣習に要約されます。 DOSは完全なCR/LF規則を使用し、UNIXはそれを少し短縮しました。今、私たちは立ち往生しています!

17
Dave Markle

他の人が答えを与えましたが、私は追加したいと思います...あなたはタイプライターを使用するには若すぎると思いますか? ;)キャリッジはドラムです。水平方向に右に移動すると、静止タイプのヘッドがページの左マージンに戻ります。指と親指を使用してキャリッジを回転させると、ページが1行進みます。

2
likejudo

私は、1つではなく2文字(場合によってはそれ以上)を送信する理由は、データ転送速度を物理的な印刷速度(によりよく一致させるためである)という結果に複数のアカウントを見ましたずっと前)。プリントヘッドの移動は、単一の文字を印刷するよりも時間がかかり、余分な文字を送信することは、データ転送が印刷デバイスより先に進むのを防ぐ方法でした。したがって、Windowsで行末に複数の文字がある理由は、QWERTYキーボード-が意図されていた理由と基本的に同じです。遅くなります

明らかに、この慣行がWindowsで今日まで続いている理由は、継続的な後方互換性、最終的には単なる慣性の概念に基づいています。

ただし、注目すべきは、この規則は、オペレーティングシステムレベルでWindowsによって厳密に実施されていないことです。 Windowsアプリケーションは、互換性を保とうとしている他のアプリケーションに応じて、この規則を自由に無視できます。

興味深いことに、 「改行」に関するウィキペディアの記事 は、Windows 8がLFのみの使用に変更を導入する可能性があると主張しています。この記事では、Mac OS XがLF + CRからLFへの移行を導入したとも述べています。

1
nobar

From Wikipedia

CR + LFシーケンスは、コンソールデバイスとしてテレタイプマシン(通常はASR33)を採用していた初期の多くのコンピューターシステムで一般的に使用されていました。

1
Nick Heidke