上一行结束的地方。所以即使是unix,当处于raw模式时,也需要CR + LF来终止行。LF之前的隐式CR是unix的发明,可能是为了节省,因为它每行节省一个字节。 C语言的unix祖先将这个约定带入了C语言标准,它只需要"\n"(编码LF)来终止行,这给运行时库带来了将原始文件数据转换为逻辑行的负担。 C语言还引入了术语"newline"来表示"通用行终止符"的概念。我听说ASCII委员会在1996年左右将字符0x0A的名称改为"newline",因此混淆程度更高了。 Here’s another discussion of the subject, from a unix perspective 我已经将第二个链接更改为The Wayback Machine中的快照,因为实际页面不再可用。 我希望这能回答你的问题。
5条答案
按热度按时间hlswsv351#
过去使用点阵打印机时,* 电传 * CR将使托架返回到行的第一个位置,而LF将进给到下一行。在文件本身中使用CR+LF使直接发送文件到打印机成为可能,而不需要任何类型的打印机驱动程序。
4smxwvx52#
@sshannin发布了Raymond Chen博客的网址,但已经不能用了,博客更换了内部软件,所以网址也变了。
在浏览了新博客中的旧帖子后,我发现了它here。
引用博客:
为什么行终止符是CR + LF?
这个协议可以追溯到电传打字机时代。CR代表"回车"--CR控制字符返回打印头("carriage")移到第0列,而不移动纸张。LF代表"linefeed"-LF控制字符在不移动打印头的情况下将纸张移动一行。因此,如果您想将打印头返回到第0列,(准备打印下一行)并推进纸张(这样它就能在新纸上打印),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。如果你设置错误,你会得到stairstep文本,其中
上一行结束的地方。所以即使是unix,当处于raw模式时,也需要CR + LF来终止行。LF之前的隐式CR是unix的发明,可能是为了节省,因为它每行节省一个字节。
C语言的unix祖先将这个约定带入了C语言标准,它只需要"\n"(编码LF)来终止行,这给运行时库带来了将原始文件数据转换为逻辑行的负担。
C语言还引入了术语"newline"来表示"通用行终止符"的概念。我听说ASCII委员会在1996年左右将字符0x0A的名称改为"newline",因此混淆程度更高了。
Here’s another discussion of the subject, from a unix perspective
我已经将第二个链接更改为The Wayback Machine中的快照,因为实际页面不再可用。
我希望这能回答你的问题。
rkue9o1l3#
它来自过去的电传打字机(和打字机)。
过去,当你打完一行字后,你必须把打字机的滑架(在你打字时,滑架托着纸并向左滑动)移回到行首(CR),然后你必须把纸向前推一行(LF)才能移到下一行。
有些情况下,你可能不想在返回回车时换行,比如你想用破折号删除一个字符(你只需要覆盖它)。
但基本上,它归结为约定。DOS使用完整的CR/LF约定,UNIX将其缩短了一点。现在我们卡住了!
0x6upsns4#
从Wikipedia开始:
序列CR + LF在许多早期采用电传打字机的计算机系统上是常用的,典型的是ASR33,作为控制台设备,因为这个序列需要将这些打印机定位在新行的开始。
kuarbcqp5#
我看过不止一个账号,大意是说发两个字的原因而不是一个是为了更好地匹配数据传输速率与物理打印速率(* 这是很久以前的事了 *)移动打印头比打印单个字符花费更长的时间,并且发送额外的字符是防止数据传输超过打印设备的一种方式。因此,我们在Windows中使用多个字符作为行尾的原因基本上与我们使用QWERTY键盘的原因相同--它旨在降低速度。
显然,这种做法在Windows中持续到今天的原因是基于正在进行的向后兼容性的一些概念,最终只是简单的惯性。
但是需要注意的是,Windows并没有在操作系统级别严格执行此约定。任何Windows应用程序都可以忽略此约定,具体取决于它试图与哪些其他应用程序兼容。
有趣的是,Wikipedia article about "Newline"声称Windows 8可能会引入一个只使用LF的变化。