mywiki:linux:filereplace
This tool is used to replace first binary file at specified offset Binary file1, Binary file2, Final file: part of file1 + file2 + part of file1. Note: File1 file length no change.
- replace_merge.c
#include <stdio.h> #include <stdlib.h> #include <string.h> char *ReadFile(char *name, int *len) { FILE *file; char *buffer; unsigned long fileLen; //Open file file = fopen(name, "rb"); if (!file) { fprintf(stderr, "Unable to open file %s", name); return NULL; } //Get file length fseek(file, 0, SEEK_END); fileLen=ftell(file); fseek(file, 0, SEEK_SET); //Allocate memory buffer=(char *)malloc(fileLen+1); if (!buffer) { fprintf(stderr, "Memory error!"); fclose(file); return NULL; } //Read file contents into buffer fread(buffer, 1, fileLen, file); fclose(file); printf("Read %u bytes from file %s \n", fileLen, name); *len = fileLen; return buffer; } int WriteFile(char *name, char *buf, int len) { FILE *file; //Open file file = fopen(name, "wb"); if (!file) { fprintf(stderr, "Unable to create file %s", name); return -1; } //Read file contents into buffer fwrite(buf, len, 1, file); fclose(file); printf("Write %u bytes to file %s \n", len, name); return 0; } int main(int argc, char **argv) { int len1, len2, offset; char *buf1, *buf2; if( argc != 5) { printf("Usage: %s file1 file2 offset output_file\n"); return 0; } buf1=ReadFile(argv[1], &len1); buf2=ReadFile(argv[2], &len2); if( !buf1 || !buf2) goto END; offset=atoi(argv[3]); printf("offset=%u\n", offset); if( len2+offset <= len1 ) { memcpy(buf1+offset, buf2, len2); WriteFile(argv[4], buf1, len1); } else printf("File1 %s is less than File2 %s + offset(%u)\n", argv[1], argv[2], offset); END: if( !buf1) free(buf1); if( !buf2) free(buf2); return 0; }
mywiki/linux/filereplace.txt · Last modified: by 127.0.0.1
