zoukankan      html  css  js  c++  java
  • dos2unix与unix2dos之学习记录

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    假设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 != ' ')
            {
                fputc(char, fp_dos);
            }
            else
            {
                fputc(' ', fp_dos);
                fputc(char, fp_dos);
            }
        }
    }

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

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

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

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

    部分代码如下:

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

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


  • 相关阅读:
    【Hadoop】MapReduce练习:多job关联实现倒排索引
    【Hadoop】MapReduce练习:分科目等级并按分区统计学生以及人数
    【Zookeeper】利用zookeeper搭建Hdoop HA高可用
    【Linux】部署NTP时间同步服务器
    VSCode前端文件以服务器模式打开
    移动端公共方法封装
    常用浏览器及内核
    XHTML和HTML的区别
    javascript算法
    计算属性和侦听器
  • 原文地址:https://www.cnblogs.com/james1207/p/3299631.html
Copyright © 2011-2022 走看看