选做题目以及分析

  • 题目:编写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进制数。另外,观察到全部输出完毕后总是会输出一个'\n'。
  • 根据这些分析我们就能知道,这其实不是一个很难的程序,伪代码:
    读取命令行输入的参数(文件名)
以16为每个字符串的长度读取文件中的内容,得到字符串s1
每读取一个,进行下列操作直到文件中的消息全部读完:
{
设定新的字符串s2=s1
先输出每行开头printf("%07o",截止到上一行,字符的个数)
按一定间隔输出s1
换行
按一定间隔输出s2中每个字符的ASCII码
}
最后一行输出字符的总个数printf("%07o",字符的总个数)

编程实现

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



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

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

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

编程中遇到的问题和解决

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

参考资料

心得体会

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

编程实现Linux系统的od功能的更多相关文章

  1. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  2. 配置Linux系统实现dhcp功能

    配置Linux系统实现dhcp功能 1.背景及原理    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用 ...

  3. 编程实现类似Linux系统的cp功能

    选做题目以及分析 题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文 ...

  4. Linux系统中cgroup功能介绍

    1  Cgroups简介 1.1 What are cgroups ? Cgroups(控制组)是Linux内核的一个功能,用来限制.统计和分离一个进程组的资源(CPU.内存.磁盘输入输出等).换句话 ...

  5. Linux 系统常见命令功能大全_【all】

    Linux常见快捷键(6个) ctrl + u:剪贴光标前面 ctrl + k:剪贴光标后面 ctrl + y:粘贴 ctrl + r:查找命令 ctrl + insert:复制 shift+ ins ...

  6. 如何开启和禁止Linux系统的ping功能

    在日常的网络维护和使用过程中,ping命令是最为常用的一个检测命令,它所使用的是ICMP协议,但是为了保护主机,很多时候我们需要禁止ICMP协议,在这种情况下,终端再使用ping命令检测,服务器是不会 ...

  7. LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

    19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...

  8. 一文搞懂Linux系统开发

    先列一下Linux系统开发要掌握的知识,以后有时间再一一介绍. 欢迎关注我的微信公众号:fensnote 文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 学会使用Makefile ...

  9. 从头构建自己的Linux系统

    2012-09-10        在博文“Linux系统启动过程分析”中我们了解了linux系统的启动流程,今天我们就来手动一步一步从头来构建一个最小的linux系统,然后用模拟器将其加载起来.常见 ...

随机推荐

  1. Vue音乐项目笔记(五)

    1.搜索列表的点击删除.删除全部的交互事件 https://blog.csdn.net/weixin_40814356/article/details/80496097 seach组件中放search ...

  2. ImportError: sys.meta_path is None, Python is likely shutting down

    python执行过错中,报错:ImportError: sys.meta_path is None, Python is likely shutting down 解决方法:在C:\Users\Adm ...

  3. linux网络配置命令(二)——ip

    ip命令 查看/设置路由.设备.路由策略和渠道信息 格式 ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | addr ...

  4. Spring Framework启动详解

    之前一直对Spring启动的过程很迷糊,所以这次国庆梳理一下. Spring启动一言以蔽之:创建一个根应用上下文.(因为其他的所有的应用上下文都可以通过各种方式继承它) (一)了解应用上下文 Spri ...

  5. 第二阶段——个人工作总结DAY04

    1.昨天做了什么:实现所有需要跳转活动的点击事件. 2.今天打算做什么:打算把值能够传递过去. 3.遇到的困难:无

  6. rsync+inotify

    一.rsync 1.1rsync是啥 相当于cp.scp.rm等工具,但优于这些工具,主要用在数据备份 1.2.rsync安装 yum -y install rsync --update 客户端删除文 ...

  7. php面向对象比较

    在PHP中有 = 赋值符号.== 等于符号 和 === 全等于符号, 这些符号代表什么意思? (1).=是赋值符 (2).使用 == 符号比较两个对象 ,比较的仅仅是两个对象的内容是否一致. (3). ...

  8. HDU-6386-最短路

    Age of Moyu Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  9. js正则表达式 replace替换url的参数

    /* 定义替换对象键值 */var setReferArgs = function(){    var referArgs = new Object();    referArgs['#userID\ ...

  10. Object转Integer,String

    object先转为字符串,然后通过int 的封装类(Integer)的pasreInt()方法转为int 例如: Object  ob = 123; Integer.parseInt(String.v ...