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);
            }
        }

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


  • 相关阅读:
    关于Ubuntu 9.10 的aptget update 一直无法更新源的点点滴滴
    CentOS的安装和搭建文件共享服务器(Samba)
    VirtualBox 下的 Ubuntu 虚拟机中使用 Android 真机做开发调试
    VmWare下安装CentOS6图文安装教程
    CentOS的远程桌面(xdm)
    ubuntu Apache安装设置
    关于母版页的按钮事件
    TSQL使用函数uppercase更新xml
    文章的上一篇和下一篇导航 V2
    数据库用户映射到 SQL Server 登录名
  • 原文地址:https://www.cnblogs.com/james1207/p/3299631.html
Copyright © 2011-2022 走看看