私が知っている限り、すべてのオペレーティングシステムはEOL(行末)文字を表示する方法が異なります。商用オペレーティングシステムでは、EOLにキャリッジリターンを使用します(Windowsではキャリッジリターンと改行、Macでのみキャリッジリターン)。一方、LinuxはEOLを実装するために改行文字のみを使用します。
LinuxがEOLでキャリッジリターン(ラインフィードのみ)を使用しないのはなぜですか?
答え1
CRLFWindowsはMS-DOSから継承されているため、これを使用します。
MS-DOSはCRLFすでに使用中であるため使用しますCRLF。
CP / Mと80年代以前の多くのオペレーティングシステムは、テレタイプライターCRLFに印刷された行を終了する方法でした(通常のタイプライターのように行の先頭に戻り、次の行にジャンプ)。これは、前処理があまり必要ないし全く必要ないので、ファイルの印刷を簡素化する。個々の文字の使用を防ぐ機械的要件もあります。一定期間必要になるかもしれないキャリッジリターンとプラテンの回転を許可します。
Gnu/Linux はLFUnix なので使用します。クローン。1
LFUnixはスペースを節約し、正規行末に正規化するために最初から単一の文字を使用しました。両方の文字を使用することは非効率的であいまいです。このオプションは、1964年初めに使用されたMulticsから継承されました。メモリ、ストレージ、CPUのパフォーマンス、帯域幅はすべて非常に希薄なので、1行あたり1バイトを節約することはそれほど価値があります。ファイルを印刷すると、ドライバは改行文字(改行文字)をターゲットデバイスに必要な制御文字に変換します。
LFCR後者は依然として特定の用途に使用されるので好ましい。すでに入力した文字は、印刷された文字を同じ行の先頭に再配置することで上書きできます。
Appleはもともと単一の文字も使用することにしましたが、何らかの理由で別の文字を選択しましたCR。 BSDインターフェイスに切り替えながらLF。
これらの選択は、オペレーティングシステムが商用であるかどうかには関係ありません。
1あなたの質問に対する答えです。
答え2
「Newline」に関するWikipediaの記事では、1964年にMulticsまで行末(または区切り文字)でNLを選択したものを追跡します。残念ながら、この記事ではソースをほとんど引用しませんが、これが正しいことを疑う理由はありません。この選択は、CR-LFに比べて省スペースとデバイス独立性という2つの明白な利点を提供します。
主な代替手段であるCR-LFは、テレタイプマシンで用紙キャリッジを物理的に移動するために使用される制御コードから派生しました。ここで、CRは用紙キャリッジを元の位置に戻し、LFは用紙ローラを回転させて印刷位置を一段下に移動する。ライン。これら2つの制御文字は1924年にさかのぼるITA2コードに表示され、まだ使用中です(Wikipediaを参照)。 ITA2は1901 BaudotコードのMurrayバリエーションから得られたようです。
若い読者の場合、メインフレームの伝統には改行がないことに注目する価値があります。代わりに、ファイルは固定長(通常はパンチカードに基づいて80文字)または可変長にすることができます。 -length レコードは通常、各レコードの先頭に文字数を格納します。一連の可変長レコードで構成されるメインフレームファイルがあり、各レコードにランダムなバイナリコンテンツが含まれている場合は、UNIXスタイルファイルに損失なく変換するのは難しい変換になる可能性があります。
もちろん、LinuxはUnixを再実装しただけであり、Unixの設計決定の多くがMulticsから出てきたため、核心決定は1964年に下されたものと見られる。
答え3
他の答えは、継承チェーンを1960年代とテレタイプマシンにさかのぼります。しかし、彼らはこの部分を扱っていませんでした。
テレタイプ時代には再打者という作業が必要な時もありました。パスワードを削除することはできませんので、パスワードを隠すために太い行を使用することがあります。それ以外の場合は、フォントにないシンボルを取得するために再描画が行われます。たとえば、文字Oとスラッシュは新しいシンボルを作成します。
バックスペースキーを使用することもありますが、改行なしでキャリッジリターンを入力して再描画を実行します。このため、Unixユーザーはキャリッジリターンを行区切り文字として使用せず、代わりに改行を選択しました。これはCRLFルールを使用して生成されたテキストを読み取るのにも有効です。 CRは飲み込み、LFは区切りになります。
答え4
歴史的な質問をC言語の質問に置き換えることができますが、LinuxやすべてのPOSIX互換やPOSIXなどのシステムの理由〜しなければならないLF
改行文字として(または少なくともC文字が何であれ)使用する'\n'
ことは、CとPOSIXの要件の間の交差の結果です。 Cでは、「テキストファイル」と「バイナリファイル」は異なる場合がありますが、実際にはテキストファイルは一連の行レコードで構成されるレコードベースである可能性があります'\n'
。 )、POSIXでは、テキストモードとバイナリモードが同じように機能する必要があります。これがこのようなコマンドラインツールが強力で有用な理由です。バイナリのみを使用したり、テキストだけで作業したりしてもどちらも使用できない場合は、はるかに便利ではありません。CR
LF
cat