|
1
35
DOS从CP/M继承了CR-LF行尾(您称之为\r\n,只是使ascii字符显式)。CP/M从影响CP/M设计师Gary Kildall的各种DEC操作系统继承了它。 使用CR-LF,以便电传打字机将打印头返回到左边距(CR=滑架返回),然后移动到下一行(LF=换行)。 Unix人员在设备驱动程序中处理了这一点,并在必要时将LF转换为CR-LF,输出到需要它的设备。 如您所料,Mac OS X现在使用LF。 |
|
|
2
20
真的添加到@Mark Harrison。.. 那些告诉你Unix“只是输出程序员指定的文本”而DOS坏了的人是完全错误的。还有人声称,DOS在看到EOF字符时标记EOF是愚蠢的,这引发了EOF字符到底是用来做什么的问题。 文本文件行结尾没有一个真正的约定,只有特定于平台的约定。毕竟,即使是CR-LF、CR和LF也不是唯一使用的行尾约定,ASCII甚至从来不是唯一的字符集。问题在于C标准库和运行时,它没有抽象出这种依赖于平台的细节。其他第三代语言(如Pascal甚至Basic)至少在一定程度上管理了它。因此,当为其他平台编写C编译器时,需要运行时库黑客来实现与现有源代码和书籍的兼容性。 事实上,最初需要对控制台I/O进行字符串转换的是Unix和Multics,因为用户通常坐在需要CR LF线端的ASCII终端上。不过,这种翻译是在设备驱动程序中完成的,目的是抽象出设备的具体细节,假设最好采用一种约定并对存储的文本文件严格遵守。 C文本I/O黑客的原理与CygWin现在所做的相似,黑客攻击Linux运行时,使其在Windows上正常工作。有一段真正的黑客历史,即将把它们变成Unix的翻版,但还有Wine,将Linux变成Windows。奇怪的是,你可以在 CygWin FAQ (2013年添加了Internet Archive链接-该页面已不存在)。也许这只是他们的幽默感,因为他们基本上是在做他们批评的事情,但规模要大得多;-)
[
编辑
事实证明,上述被剔除的说法是不正确的,而且从来都不是。这个
我的POV中最大的责任是C,但C并不是唯一一个没有预料到它会转移到其他平台的项目。指责比尔·盖茨简直是疯了——他所做的只是购买并打磨了当时流行的CP/M的变体。真的,这只是历史——这也是我们不知道大多数文本文件中128到255代表什么的原因。考虑到很容易应对所有三种线端约定,奇怪的是,一些开发人员仍然坚持“我的平台约定是唯一正确的方式,不管你喜欢与否,我都会强迫你”的态度。 此外,Unicode行分隔符代码点U+2028是否会在未来的文本文件中取代所有这些约定? ;-) |
|
|
3
8
值得注意的是,CRLF几乎是互联网标准。也就是说,几乎所有面向线路的标准互联网协议都使用CRLF。SMTP、POP、IMAP、NNTP等。电子邮件正文由以CRLF结尾的行组成。 |
|
|
4
0
根据维基百科:一开始,程序必须在LF之前添加额外的CR字符来减慢程序速度,这样打印机就有时间跟上CP/M,后来Windows使用了这种方法。但是Multics的打印机驱动程序会自动添加额外的字符,这样程序就不必这样做了,Unix开发人员也不必这样。但这些都不能解释为什么早期的Mac没有这样做(现在它们是基于Unix的)。 https://en.wikipedia.org/wiki/Newline#History :
|
|
|
Denis · 在C、linux中同步进程 2 年前 |
|
|
ridhomblr · 如果DI>32767,VGA输出不显示 2 年前 |
|
|
dmgzh · 如何根据所使用的系统更改变量值?(Python) 2 年前 |
|
|
gitm_248 · Ubuntu安装和关闭的问题:寻求解决问题的指导 2 年前 |
|
|
Adriana · 尝试创建文件列表时出错 2 年前 |