fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. FILE *fp_in;
  7. FILE *fp_out;
  8.  
  9. unsigned char buf;
  10. unsigned long address;
  11. unsigned long filesize;
  12. int count = 0;
  13.  
  14. /* 引数チェック */
  15. if (argc != 4)
  16. {
  17. printf("使用方法:\n");
  18. printf("%s <入力ファイル名> <先頭からの位置(バイト数)> <出力ファイル名>\n", argv[0]);
  19. return 1;
  20. }
  21.  
  22. /* 入力ファイルを開く */
  23. fp_in = fopen(argv[1], "rb");
  24. if (fp_in == NULL)
  25. {
  26. printf("入力ファイルを開けません。\n");
  27. return 1;
  28. }
  29.  
  30. /* 出力ファイルを開く */
  31. fp_out = fopen(argv[3], "w");
  32. if (fp_out == NULL)
  33. {
  34. printf("出力ファイルを開けません。\n");
  35. fclose(fp_in);
  36. return 1;
  37. }
  38.  
  39. /* ファイルサイズ取得 */
  40. fseek(fp_in, 0, SEEK_END);
  41. filesize = ftell(fp_in);
  42. rewind(fp_in);
  43.  
  44. /* ファイル名とサイズ表示 */
  45. printf("ファイル名: %s\n", argv[1]);
  46. printf("ファイルの大きさ: %lu Byte\n", filesize);
  47.  
  48. fprintf(fp_out, "ファイル名: %s\n", argv[1]);
  49. fprintf(fp_out, "ファイルの大きさ: %lu Byte\n", filesize);
  50.  
  51. /* 開始アドレス取得 */
  52. address = atol(argv[2]);
  53.  
  54. /* 指定位置へ移動 */
  55. if (fseek(fp_in, address, SEEK_SET) != 0)
  56. {
  57. printf("シークエラー\n");
  58.  
  59. fclose(fp_in);
  60. fclose(fp_out);
  61.  
  62. return 1;
  63. }
  64.  
  65. /* バイナリ表示 */
  66. while (fread(&buf, 1, 1, fp_in) == 1)
  67. {
  68. /* 8バイトごとにアドレス表示 */
  69. if (count % 8 == 0)
  70. {
  71. if (count != 0)
  72. {
  73. printf("\n");
  74. fprintf(fp_out, "\n");
  75. }
  76.  
  77. printf("%08lX: ", address);
  78. fprintf(fp_out, "%08lX: ", address);
  79. }
  80.  
  81. /* 16進数表示 */
  82. printf("%02X ", buf);
  83. fprintf(fp_out, "%02X ", buf);
  84.  
  85. count++;
  86. address++;
  87.  
  88. }
  89.  
  90. printf("\n");
  91. fprintf(fp_out, "\n");
  92.  
  93. /* ファイルを閉じる */
  94. fclose(fp_in);
  95. fclose(fp_out);
  96.  
  97. return 0;
  98. }
  99.  
Runtime error #stdin #stdout 0.01s 5324KB
stdin
Standard input is empty
stdout
使用方法:
./prog <入力ファイル名> <先頭からの位置(バイト数)> <出力ファイル名>