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

    编程实现

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

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

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

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

编程中遇到的问题和解决

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

参考资料

心得体会

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

原文地址:https://www.cnblogs.com/zhuwenyuan/p/9161553.html

时间: 2024-10-25 03:56:23

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

Linux系统中cgroup功能介绍

1  Cgroups简介 1.1 What are cgroups ? Cgroups(控制组)是Linux内核的一个功能,用来限制.统计和分离一个进程组的资源(CPU.内存.磁盘输入输出等).换句话说就是,如果一个进程加入了某一个控制组,该控制组对Linux的系统资源都有严格的限制,进程在使用这些资源时,不能超过其最大的限制数,例如:memory资源,如果加入控制组的进程使用的memory大于其限制,可能会出现OOM错误(关于OOM错误可参看Linux内核OOM机制分析).cgroup本身提供

【Linux基础】Linux系统默认目录功能简介

以下用一个表格来罗列linux默认的目录或文件及其用途: 目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - /bin 该目录存放着系统最常用的最重要的命令,相当于DOS下的内部命令,只不过它们是以独立的文件形式存在.比如:ls.cp.mkdir等命令.这个目录中的文件都是可执行的并且是普通用户都可以使用的命令.作为系统最基础的命令都放在这里. binary /usr 该目录是系统存放程序的地方,比如普通命令

linux系统的加密功能及OpenSSL使用

一.密码学简介 据记载,公元前400年,古希腊人发明了置换密码.1881年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用"恩尼格玛"密码机,密码学在战争中起着非常重要的作用. 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了"美国数据加密标准(DES)",民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES.RSA.SHA等.随着对加密强度需求的不断提高,近期又出现了A

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

19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程需要做的什么事情,所以特定看了UNIX环境编程和LINUX系统编程这2本书 重新梳理下整个要点. 内容: 一般而言: 如果程序类似于下面的情况: if((pid=fork())==0) { dochildtthing(); exit(0); } else if(pid>0) { dofathertt

linux系统回收站功能的实现

如何实现linux系统的回收站功能,对rm权限做限制,避免误删造成不可逆问题. 这就要靠环境变量去实现,首先需要了解环境变量的作用. /etc/profile,/etc/bashrc 是系统全局环境变量设定 ~/.profile,~/.bashrc用户家目录下的私有环境变量设定 当登入系统时候获得一个shell进程时,其读取环境设定档有三步 1首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/profile.d和/etc/inputrc 2

浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统

实验环境win7+VM11.1 本文的源码的版本了 dropbear-2013.58.tar.bz2    busybox-1.21.1.tar.bz2 linux-3.13.6.tar.xz  nginx-1.4.7 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx:提供

Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能

第3章 为精简的Linux系统增加网络功能和开关机功 在阅读这篇博文之前,建议先阅读我的上两篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!) 第1篇:Linux系统裁减之,制作一个极度精简的Linux-1http://blog.51cto.com/linuxprince/2045703 第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件http://blog.51cto.com/linuxprince/2046142 3.1 为

定制微型Linux系统

前言 1.使用以下命令获取本机硬件信息: # cat /proc/cpuinfo # cat /proc/meminfo # lspci -v 2.实验目的 这次实验的目的是:借助于宿主机(正常安装CentOS6.5系统),在目标机上构建一个微型Linux系统,能提供基本的bash命令行接口,提供基本的网络功能,提供用户登录接口和完成身份验证,提供远程连接功能,提供nginx功能. 3.实验说明 (1)宿主机:正常安装CentOS6.5系统(ip : 192.168.1.152) 把宿主机上的第

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]