Книга: Программирование для Linux. Профессиональный подход

Листинг Б.4. (hexdump.c) Отображение шестнадцатеричного дампа файла

Листинг Б.4. (hexdump.c) Отображение шестнадцатеричного дампа файла

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
 unsigned char buffer[16];
 size_t offset = 0;
 size_t bytes_read;
 int i;
 /* Открытие файла для чтения. */
 int fd = open(argv[1], O_RDONLY);
 /* Чтение данных из файла по одному блоку за раз. Чтение
    продолжается до тех пор, пока размер очередной порции байтов
    не окажется меньше размера буфера. Это свидетельствует
    о достижении конца буфера. */
 do {
  /* чтение следующей строки байтов. */
  bytes_read = read(fd, buffer, sizeof(buffer));
  /* Отображение смещения, а затем самих байтов. */
  printf("0x%06x : ", offset);
  for (i = 0; i < bytes_read; ++i)
   printf("%02x ", buffer[i]);
  printf("n");
  /* Вычисление позиции в файле. */
  offset += bytes_read;
 }
 while (bytes_read == sizeof(buffer));
 /* Конец работы. */
 close(fd);
 return 0;
}

Ниже показаны результаты работы программы. Она выводит дамп самой себя.

% ./hexdump hexdump
0x000000 : 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
0x000010 : 02 00 03 00 01 00 00 00 c0 B3 04 0B 34 00 00 00
0x000020 : e8 23 00 00 00 00 00 00 34 00 20 00 06 00 28 00
0x000030 : 1d 00 1a 00 06 00 00 00 34 00 00 00 34 80 04 08
...

Эти результаты могут быть разными в зависимости от того, какой компилятор применялся и какие флаги компиляции были установлены.

Оглавление книги


Генерация: 0.109. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз