EnterキーがEOLを送信しないのはなぜですか?

EnterキーがEOLを送信しないのはなぜですか?

Unix/Linux EOL は、LF、改行、ASCII 10、エスケープシーケンスです\n

以下は、正確に1回のキーを押すためのPythonコードの断片です。

import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
    tty.setraw(sys.stdin.fileno())
    ch = sys.stdin.read(1)
finally:
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

Enterこのコードフラグメントに応答してキーボードを押すと、\rキャリッジリターン、ASCII 13が表示されます。

存在するWindowsEnter送信CR LF == 13 10。 *nixはWindowsではありません。なぜEnter10ではなく13を提供するのですか?

ベストアンサー1

本質的に「手動打者が出現して以来、そうなってきたからです」本当。

手動タイプライター輸送給紙されて給紙されたときに前方に移動し(スプリングが装着されている)、キャリッジを解除するレバーまたはキーがあり、スプリングがキャリッジを左マージンに戻すことができます。

電子データ入力(全身タイプライターなど)が導入され、彼らもこれを推進しました。このため、Enter多くの端末のキーにはというラベルが付いていますReturn

キャリッジを左マージンに戻した後、改行が発生します(手動プロセス中)。繰り返しますが、電子デバイスは、個々のline-feed操作のために受動デバイスを模倣する。

どちらの操作もCR(キャリッジリターン)とLF(改行)があります。この写真はASR 33テレタイプ情報キーボードをReturn右、Line-Feed左に表示します。それに正しい、これは主キーです。

ここに画像の説明を入力してください。

その後、Unixが登場しました。開発者は内容を短くするのが好きです(「生成された」すべての略語を見てくださいcreat)。潜在的に2つの部分からなるプロセスに直面して、彼らは改行文字の前にキャリッジリターンがある場合にのみ意味があると決定しました。だから彼らは明示的なキャリッジリターン文字を削除しました。文書、端末のReturnキーストロークを変換して対応する改行を送信します。混乱を避けるために、改行を「改行」といいます。

端末にテキストを書き込むと、Unixは逆変換を行います。改行はキャリッジリターン/改行になります。

(例:「一般」:翻訳を行わない「生」モードとは反対のいわゆる「料理モード」)。

要約:

  • キャリッジリターン/ラインフィードの順序は13 10です。
  • これ装備13個送ってください(あなたの言葉は「永遠」だから)
  • Unixシリーズシステム変化13 10 まで
  • 他のシステムは必ずしも10個しか保存する必要はありません(Windowsは基本的に互換性がどれほど重要かによって10または13 10のみを許可します)。

おすすめ記事