#include <io.h>
#include <sys\stat.h>
#include <sys\types.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <conio.h>
void main(int argc, char *argv[]){
int fd; // ファイルディスクリプタ
int address = 0; // アドレス
int ret; // read関数の戻り値
unsigned char data[16]; // 読み込んだ文字
// パラメータが少ない場合
if ( argc < 2 ){
printf("パラメータが足りません.\n\n");
return;
}
// パラメータが多い場合
if ( argc > 3 ){
printf("パラメータが多すぎます.\n\n");
return;
}
// パラメータは「/?」か?
if ( strcmp(argv[1], "/?" ) == 0 ){
printf("ファイルの16進数ダンプを表示します.\n\n");
printf("MYDUMP [ドライブ:][パス]ファイル名\n\n");
return;
}
// ファイルオープン
fd = open(argv[1], O_RDONLY | O_BINARY );
if ( fd == -1 ){
switch ( errno ){
case EACCES :
printf("アクセスは拒否されました");
break;
case EMFILE :
printf("開いているファイルが多すぎます");
break;
default :
printf("ファイルが見つかりません.");
}
printf(" - %s\n\n", argv[1]);
return;
}
// 16バイト読む
while( (ret = read(fd, data, sizeof(data))) > 0 ){
int i;
// アドレス表示
printf("%08X : ", address);
// データ表示
for ( i = 0 ; i < ret ; i++ ){
int tmp = data[i];
printf("%02X ", tmp);
}
// 空白表示
for ( i = sizeof(data) - ret ; i > 0 ; i-- )
printf(" ");
// スペース
printf(" ");
for ( i = 0 ; i < ret ; i++ ){
if ( data[i] >= 0x20 && data[i] <= 0x7E )
printf("%c", data[i]);
else
printf(".");
}
// 改行
printf("\n");
address += ret;
}
// ファイルクローズ
close( fd );
}
|