在计算机还没有出现之前,有一种叫做电传打字机(TeletypeModel33)的玩 意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候, 要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过 来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每 行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在 左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和 “回车”的来历,从它们的英语名字上也可以看出一二 ### 关于回车和换行的知识点 #### 1. 回车与换行的历史背景 在计算机技术尚未成熟之前,电传打字机(Teletype Model 33)是一种重要的通信工具,用于发送和接收电报。这种设备的工作原理是通过一系列的机械动作来打印或发送字母和数字。电传打字机每秒可以打印10个字符,但在换行时,由于需要大约0.2秒的时间来完成这一过程,这段时间足以传输额外的两个字符,因此可能导致数据丢失。 为了解决这个问题,研究人员在每行的末尾添加了两个特殊字符:“回车”(Carriage Return, CR)和“换行”(Line Feed, LF)。这两个字符的作用分别是: - **回车**(CR, ASCII码值为13):用来告诉打字机将打印头定位到行的起始位置。 - **换行**(LF, ASCII码值为10):指示打字机将打印纸向下移动一行,准备开始新的一行打印。 #### 2. 计算机系统中的回车与换行 随着计算机的发展,回车与换行的概念也被引入到计算机系统中。然而,不同的操作系统对这两个字符的使用方式有所不同,导致了跨平台文件兼容性的问题。 - **Unix/Linux系统**:通常只使用“换行”(LF)作为行结束符,ASCII码为10。这意味着在Unix/Linux系统中的文件,每行末尾只有一个LF字符。 - **Windows系统**:使用“换行”(LF)和“回车”(CR)组合作为行结束符,顺序为CR LF,ASCII码分别为13和10。因此,在Windows系统中的文件,每行末尾包含CR LF两个字符。 - **早期的Mac系统**:最初采用“回车”(CR)作为行结束符,ASCII码为13。不过,从Mac OS X开始,Apple也采用了与Unix系统相同的LF作为行结束符。 #### 3. 跨平台文件处理的问题 这些差异会导致跨平台文件处理时出现各种问题。例如: - 在Unix/Linux系统中创建的文件如果包含LF作为行结束符,则在Windows系统中打开时,所有的内容可能显示为一行。 - 相反,如果文件是在Windows系统中创建的,并且包含了CR LF作为行结束符,那么在Unix/Linux系统中打开时,每行的末尾可能会出现一个不可见的“^M”符号,这是因为Unix/Linux系统默认识别LF字符作为行结束符。 #### 4. 编程语言中的处理方式 在编程时,根据使用的文件操作模式(文本模式或二进制模式),对回车换行的处理也会有所不同。 - **文本模式**:在文本模式下,输入时系统会自动将CR LF转换为单个LF字符,而在输出时,则会将LF字符转换为CR LF组合。 - **二进制模式**:在二进制模式下,输入输出过程中不会进行任何转换,因此CR LF会保持原样。 #### 5. 实验示例 下面是一个简单的C语言代码示例,用于演示不同文件操作模式下对回车换行字符的影响: ```c #include <stdio.h> int main() { FILE *fp1, *fp2, *fp3, *fp4; char a[10], b[10]; // 以文本模式打开文件 fp1 = fopen("01.txt", "r"); fp3 = fopen("02.txt", "w"); fread(a, sizeof(unsigned char), 8, fp1); // 读取内容并转换为LF fwrite(a, sizeof(unsigned char), 8, fp3); // 写入内容,LF会被转换为CR LF fclose(fp1); fclose(fp3); // 以二进制模式打开文件 fp2 = fopen("01.txt", "rb"); fp4 = fopen("03.txt", "wb"); fread(b, sizeof(unsigned char), 8, fp2); // 读取内容保持原样 fwrite(b, sizeof(unsigned char), 8, fp4); // 写入内容也保持原样 fclose(fp2); fclose(fp4); return 0; } ``` 该实验结果表明,在文本模式下,系统会自动将CR LF转换为单个LF字符,而在二进制模式下则不会进行此类转换。 #### 结论 回车与换行的概念源于电传打字机时代,后被引入到计算机系统中。不同的操作系统对这两个字符的使用方式不同,从而导致了跨平台文件兼容性问题。理解这些基础知识对于进行跨平台文件处理非常重要,特别是在编程领域,选择正确的文件操作模式可以避免许多不必要的麻烦。
- 粉丝: 47
- 资源: 387
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助