1. unix2dos与dos2unix这两个tool是用来干什么的?

这首先应该要说明一下背景知识:

unix类操作系统下,换行字符是\n;

而早期的dos操作系统,其换行字符是由\r\n组成。

所以如果将unix系统下的文本文件copy到dos系统下

或者将dos系统下的文本文件拷贝到unix下可能会存在问题。

所以就出现了unix2dos以及dos2unix这两个tool。

2. 为什么早期的操作系统换行需要用\r\n两个字符来表示?

关于这个历史就当是看故事吧。

在计算机出现之前,有一种叫做电传打印机的设备,每秒钟打印10个字符,

但是当一行打印结束,需要换到下一行时,需要耗时0.2s做换行回车的动作

将打印机指向下一行起始位置。而如果在这过程中有新的字符传过来,

则该新字符就会丢失。那为了解决这个问题,研究人员就想到了在回车换行的

过程中多打印\r\n这两个不会影响到显示的字符来解决可能存在的字符丢失问题。

而随着计算机的发展,科学家发现用\n一个字符即可达到这种换行回车的目的了。

3. linux系统下的文本文件直接copy到windows下面显示只会显示出一正行长长的字串?

这个目前我也不确定,需要通过实验以及更丰富的理论知识来确认。

如果有知道的朋友,也可以跟我讲喔,谢谢。

4. 所以dos系统下文本文件的size要比unix系统下文本文件的size要小?

毫无疑问,在二者显示内容完全相同的情况下dos系统文本文件每一行都会多一个\r字符。

5. unix2dos源代码应该如何实现?

综上所讲,我们知道unix2dos其实很简单的就是在每一个\n字符前面不上\r字符。

假设unix2dos这个tool的用法是:

./unix2dos ./unix_file ./dos_file

那伪代码过程基本如下:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    fp_unix = fopen(argv[1], "rb");
    fp_dos = fopem(argv[2], "wb");
    while(!feof(fp_unix))
    {
        char = fgetc(fp_unix);
        if (char != '\n')
        {
            fputc(char, fp_dos);
        }
        else
        {
            fputc('\r', fp_dos);
            fputc(char, fp_dos);
        }
    }
}

6. dos2unix源代码应该如何实现?

dos2unix的代码实现很类似,区别在于如果连续的两个字符分别为\r,\n,

则需要将\n之前的\r字符删除掉。所以网上有朋友写了类似的程序将文件

中所有的\r字符删除是不正确的,因为\r可能是用户特定有用的字符。

部分代码如下:

while(!feof(fp_dos))
    {
        char1 = fgetc(fp_dos);
        char2 = fgetc(fp_dos);
        if (char1 == '\r' && char2 == '\n')
        {
            fputc(char2, fp_unix);
        }
        else
        {
            fputc(char1, fp_unix);
            fputc(char2, fp_unix);
        }
    }

以上代码并未做诸多参数有效性检查,出错处理等,仅供参考。

dos2unix与unix2dos之学习记录的更多相关文章

  1. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  2. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

随机推荐

  1. 移动平台WEB前端开发技巧汇总(转)

    最近我很关注移动前端的知识,但做为一个UI设计师和web前端工作人员没有这个工作环境接触,做为门外汉,网上系统的知识也了了,一直有种雾里看花的感觉,见到本文,我自己是奉为经典.所以我分享之后又专门打笔 ...

  2. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...

  3. Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序

    原文 Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8- ...

  4. VC之美化界面(内容覆盖十分全面,经典)

    界面美化 摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理: 2. 熟悉Windows消息机制,熟悉MFC的消息映射和 ...

  5. C# 操作Excel (二)

    根据翻阅LTP.Net知识库系列之四中Office操作功能: 一.记录常用如下 (1)“在自己的程序中宿主Office”的意思就是在我们自己开发的应用程序的窗体上,显示一个就像Office应用程序那样 ...

  6. fedora 下安装 文泉驿正黑体

    1. 可以到文泉驿正黑体的 主页 http://wenq.org/wqy2/index.cgi?%E9%A6%96%E9%A1%B5 最好能去官网表示一下支持 2. 也可以直接使用命令 :  sudo ...

  7. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  8. hdu1698 Just a Hook 线段树:成段替换,总区间求和

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...

  9. input file 在开发中遇到的问题 类似ajax form表单提交 input file中的文件

    最近在做项目的过程中遇到个问题,在这里做个记录防止日后忘记 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为 ...

  10. Spring IOC(DI)之注入方式

    一次被问到IOC的注入方式,当时脑袋一阵混乱,不知道噻.于是google了一下,发现众说纷纭,有说三种的,有说四种的.都滚犊子吧,还是看看官方文档吧. DI exists in two major v ...