• 编程实现Linux系统的od功能


    选做题目以及分析

    • 题目:编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能
    • 分析:我觉得这道题目中的参数应当是-tx1而不是-tx,使用了-tx后结果如下:

    而使用-tx1后的结果如下:

    自学od功能

    • 语法
      od [option] file(s)

    • 常用参数以及功能
      指定参数:
      -A :指定地址基数,包括:

        d 十进制
      
        o 八进制(系统默认值)
      
        x 十六进制
      
        n 不打印位移值
      

    -t :指定数据的显示格式,主要的参数有:

        c ASCII字符或反斜杠序列
    
        d 有符号十进制数
    
        f  浮点数
    
        o 八进制(系统默认值为02)
    
        u 无符号十进制数
    
        x 十六进制数
    

    程序设计

    • 根据截图再次分析:由开始的截图我们可以知道,每行只输出16个字符,在这16个字符的下方打印相应的ASCII码,每行的开头对应该行字符个数的8位8进制数。另外,观察到全部输出完毕后总是会输出一个' '。
    • 根据这些分析我们就能知道,这其实不是一个很难的程序,伪代码:
        读取命令行输入的参数(文件名)
        以16为每个字符串的长度读取文件中的内容,得到字符串s1
        每读取一个,进行下列操作直到文件中的消息全部读完:
        {
            设定新的字符串s2=s1
            先输出每行开头printf("%07o",截止到上一行,字符的个数)
            按一定间隔输出s1
            换行
            按一定间隔输出s2中每个字符的ASCII码
        }
        最后一行输出字符的总个数printf("%07o",字符的总个数)
    

    编程实现

    • 关键代码注释(见图片)

    • 将一段歌词写在a.text文档中:

    • 运行代码,得到如下结果:

    • 成功运行出Linux系统下的od命令

    编程中遇到的问题和解决

    • 问题一:一开始并没有注意到输出全部字符后需要输出一个“ ”符号,到最后才想起来,但是要改代码又要全部都改很麻烦
    • 问题一解决:翻找课本后发现随机流是可以调用lenth()方法来直接获得一个文件里面的字符个数的,所以“投机取巧”,在开头建了个随机流来获得文件中的字符个数,最后和已经输出的字符个数做比较,相等时打印“ ”以及对应的两位16进制ASCII码。

    参考资料

    心得体会

    这个选做难度比较小,但是如果要对od命令的其他功能进行扩充的话感觉还是有点麻烦的。实现方法应该是:需要针对命令行输入的参数不同使用多个if-else语句。

  • 相关阅读:
    MySql中的变量定义
    mysql常用脚本
    Spring中依赖注入的使用和配置
    在linux下通过sh运行java程序
    linux下shell脚本学习
    eclipse导出jar包
    mysql中游标的使用
    netty中LengthFieldBasedFrameDecoder的使用
    网络游戏服务器架构(转)
    H2 database的使用
  • 原文地址:https://www.cnblogs.com/zhuwenyuan/p/9161553.html
Copyright © 2020-2023  润新知