处理 ELF 文件的最佳方法是使用 ELF 库(libelf
谷歌知道它),假设它对您可用。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)
) 并退出。