私の知る限り、すべてのオペレーティングシステムには、行末(EOL)文字をマークする異なる方法があります。商用オペレーティングシステムでは、EOLにキャリッジリターンを使用します(Windowsではキャリッジリターンとラインフィード、Macではキャリッジリターンのみ)。一方、LinuxはEOLにラインフィードを使用します。
LinuxがEOLにキャリッジリターンを使用しないのはなぜですか(代わりにラインフィードのみ)。
私の知る限り、すべてのオペレーティングシステムには、行末(EOL)文字をマークする異なる方法があります。商用オペレーティングシステムでは、EOLにキャリッジリターンを使用します(Windowsではキャリッジリターンとラインフィード、Macではキャリッジリターンのみ)。一方、LinuxはEOLにラインフィードを使用します。
LinuxがEOLにキャリッジリターンを使用しないのはなぜですか(代わりにラインフィードのみ)。
回答:
Windowsが使用するのはCRLF、MS-DOSから継承したためです。
MS-DOSはCRLF、既にを使用していたCP / Mに触発されたために使用しCRLFます。
CP / Mおよび80年代以前の多くのオペレーティングシステムは、CRLFテレタイプで印刷された行を終了する方法であったために使用されました(通常のタイプライターのように、行の先頭に戻り、次の行にジャンプします)。これにより、前処理がほとんど必要ないか、まったく必要ないため、ファイルの印刷が簡素化されました。単一のキャラクターを使用できないようにする機械的な要件もありました。キャリッジが戻り、プラテンが回転するまでに時間がかかる場合があります。
Gnu / LinuxはLFUnix クローンであるため使用します。1
Unixは、LFスペースを節約し、標準的な行末に標準化するために最初から単一の文字を使用していましたが、2文字を使用するのは非効率的であいまいでした。この選択は、1964年には早くも使用されていたMulticsから継承されました。メモリ、ストレージ、CPUパワー、および帯域幅は非常にまばらなので、1行あたり1バイトを節約する価値がありました。ファイルが印刷されると、ドライバーは改行(改行)をターゲットデバイスに必要な制御文字に変換していました。
LF好まれたCR後者は、まだ具体的な使用方法を持っていたので。印刷された文字を同じ行の先頭に再配置することにより、すでに入力された文字を上書きできました。
Appleは最初は単一の文字も使用することにしましたが、何らかの理由でもう1つの文字を選択しましたCR。BSDインターフェースに切り替えると、に移動しましたLF。
これらの選択は、OSが商用であるかどうかに関係ありません。
1これはあなたの質問に対する答えです。
\n
、特定の出力デバイスに関係なく、単一ので表示されます。
「改行」に関するウィキペディアの記事は、1964年のMulticsの行末記号(または区切り記号)としてのNLの選択を追跡しています。残念ながら、この記事には情報源への引用がほとんどありませんが、これが正しいことを疑う理由はありません。この選択には、CR-LFよりも2つの明らかな利点があります。スペースの節約とデバイスの独立性です。
主な代替案であるCR-LFは、テレタイプマシンで用紙キャリッジを物理的に移動するために使用される制御コードに由来します。CRはキャリッジをホームポジションに戻し、LFは用紙ローラーを回転させて印刷位置を1つ下に移動します。ライン。ITA2コードには2つの制御文字が表示されますが、これらは1924年に遡り、現在も使用されているようです(Wikipediaを参照)。明らかにITA2は、1901年に遡るBaudotコードのマレー版からそれらを取り出しました。
若い読者にとっては、メインフレームの伝統には改行文字がなかったことに注目する価値があります。むしろ、ファイルは、固定長(パンチカードに基づいて80文字が多い)または可変長のレコードのシーケンスでした。可変長レコードは通常、各レコードの先頭に文字カウントで保存されていました。それぞれが任意のバイナリコンテンツを含む一連の可変長レコードで構成されるメインフレームファイルがある場合、これをUNIXスタイルのファイルに無損失に変換するのは難しい変換になる可能性があります。
もちろん、LinuxはUnixの再実装に過ぎず、UnixはMulticsから多くの設計上の決定を下したため、1964年に重要な決定が下されたようです。
他の答えは、1960年代までの継承チェーンとテレタイプをたどりました。しかし、ここに彼らがカバーしなかった一つの側面があります。
テレタイプの時代には、オーバーストライクと呼ばれることをすることが望ましい場合がありました。パスワードを消去することは不可能であるため、パスワードをあいまいにするために重ね打ちが使用されることがありました。また、フォントにない記号を取得するために、重ね打ちが行われました。たとえば、文字Oとスラッシュは新しいシンボルを生成します。
バックスペースを使用することもありましたが、改行なしでキャリッジリターンを入力することで、オーバーストライクが達成されました。このため、Unixの人々は改行を改行として無効にし、代わりに改行を選択しました。これは、CRLF規則を使用して作成されたテキストを読む場合にもうまく機能しました。CRが飲み込まれ、LFがセパレータになります。
歴史的な質問をC言語に関する質問に翻訳することはできますが、改行とLinuxのすべてのPOSIX準拠システムまたはPOSIX準拠システムがLF
(または少なくともC '\n'
文字が何であれ)使用しなければならない理由は、交差の結果ですCおよびPOSIXの要件の。Cは、「テキストファイル」と「バイナリファイル」を可能にしながら、異なること(実際にはテキストファイルがレコード・ベースのほかに、行レコードの配列からなることができるようにそれほど珍しいものを有することに'\n'
翻訳へ/からCR
/ LF
DOS / Windows上のように)、POSIXは、テキストモードとバイナリモードが同じように動作することを義務付けています。これが主な理由は、コマンドラインツールがcat
強力で便利です。バイナリのみ、またはテキストのみで機能し、両方ではない場合は、はるかに少なくなります。