博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
An Excellent Snipt Code Snippet (HexDump.c)
阅读量:6425 次
发布时间:2019-06-23

本文共 1785 字,大约阅读时间需要 5 分钟。

hot3.png

/*
 * Copyright (c) 1993 by David I. Bell
 * Permission is granted to use, distribute, or modify this source,
 * provided that this copyright notice remains intact.
 *
 * Most simple built-in commands are here.
 */
#include "sash.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <pwd.h>
#include <grp.h>
#include <utime.h>
#include <errno.h>
void
do_hexdump(argc, argv)
int argc;
char **argv;
{
FILE *fp;
int count;
int c;
char text[17];
unsigned char buf[130];
char *name = 0;
unsigned long pos = 0;
char *myname = argv[0];
 
if ( (argc > 2) && !strcmp(argv[1],"-s") ) {
pos = strtoul(argv[2], 0, 0);
argc -= 2;
argv += 2;
}
if (argc <= 1) {
fprintf(stderr, "No filename provided\n");
return;
}
name = argv[1];
fp = fopen(name, "r");
if (!fp) {
fprintf(stderr, "Failed to open file '%s': %s\n",
name, strerror(errno));
return;
}
if (pos)
fseek(fp, pos, SEEK_SET);
c = 0;
text[16] = 0;
while(!feof(fp)) {
 strcmp(text, "                ");
 while (c < (pos & 0xf)) {
   if (c == 0)
     printf("%4X:", pos & 0xfffffff0);
   printf( (c == 8) ? "-  " : "   ");
   text[c] = ' ';
   c++;
 }
 {
   int p = 0;
            count = fread(buf, 1, 128 - (pos % 16), fp);
          
            if (count <= 0)
              break;
            while (p < count) {
              c = (pos & 0xf);
            
              if (c == 0)
                printf("%4X:", pos & 0xfffffff0);
              
              if ((buf[p] < 32) || (buf[p]>126))
                text[c] = '.';
              else
                text[c] = buf[p];
            
     printf( (c==15) ? " %02.2X" : (c == 8) ? "-%02.2X" : " %02.2X", buf[p]);
     
     if (c == 15)
       printf(" %s\n", text);
   
              pos++;
              p++;
            }
 }
 
 if (c = (pos & 0x0f)) {
   while (c < 16) {
     printf( (c == 8) ? "-  " : "   ");
     text[c] = ' ';
     c++;
   }
 
   printf(" %s\n", text);
 }
   
 if (feof(fp))
   break;
 
 printf("--more--");
 fflush(stdout);
 
 fgets(buf, 80, stdin);
 if (toupper(buf[0]) == 'Q')
   break;
}
if (fp != stdin)
fclose(fp);
}

转载于:https://my.oschina.net/zungyiu/blog/144194

你可能感兴趣的文章
生成水杯热气
查看>>
程序员工作心法
查看>>
三个常用的PHP图表类库
查看>>
python中异常处理--raise的使用
查看>>
高中数学与初中数学的接轨点
查看>>
python 安装第三方模块
查看>>
Whitelabel Error Page 专题
查看>>
Spring Data Redis—Pub/Sub(附Web项目源码)
查看>>
RSD和wlwmanifest是什么
查看>>
Linkedin工程师是如何优化他们的Java代码的(转)
查看>>
winfrom 如何保存datagridview中的某一行数据
查看>>
面向领域驱动的应用开发框架Apworks 2.0发布
查看>>
开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)
查看>>
ref和out
查看>>
黑客教父详解账号泄露全过程:1亿用户已泄露
查看>>
程序员必须软件
查看>>
Canvas里的globalCompositeOperation
查看>>
解决Unable to locate theme engine in module_path: "pixmap"
查看>>
贝叶斯文本分类c#版
查看>>
Centos安装KDE或GNOME
查看>>