Лучший способ обработки файлов ELF - это библиотека ELF (libelf
; Google знает об этом), при условии, что она доступна для вас. ELF-файл имеет сложную структуру, и библиотека обычно облегчает работу с файлами.
Если вы должны использовать fread()
, то он будет работать нормально, если вы поймете, что данные заполнены нулевыми или нулевыми байтами и что обычные строковые функции не будут обрабатывать данные точно из-за нулевых значений в данных. В частности, такие функции, как printf()
прекращают печать строки с первым нулевым байтом.
Для резервного копирования произвольных файлов по сети вам просто нужно открыть файл (в двоичном режиме; это не вредит Unix и крайне важно для Windows), прочитать большие блоки в память и снова записать их:
/* Copy the rest of f1 to f2 */
void fcopy(FILE *f1, FILE *f2)
{
char buffer[BUFSIZ];
size_t n;
while ((n = fread(buffer, sizeof(char), sizeof(buffer), f1)) > 0)
{
if (fwrite(buffer, sizeof(char), n, f2) != n)
err_syserr("write failed\n");
}
}
Функция err_syserr()
- это простая функция сообщения об ошибках, которая сообщает об ошибке, указанной в своих аргументах, добавляет системное сообщение об ошибке (strerror(errno)
) и завершает работу.