📄 pad.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char *argv[]){ FILE *infp, *outfp; int target_size, input_size; int unit, i; char buffer[512]; unsigned char fill_char; if(argc!=5) { printf("Argument number invalid\n"); printf("pad <size> <input file> <output file> <fill char>\n"); exit(1); } fill_char=strtoul(argv[4], 0, 0); i=strlen(argv[1]); unit=argv[1][i-1]; switch(unit) { case 'g': case 'G': argv[1][i-1]=0; target_size=(int)(atof(argv[1])*1024*1024*1024); break; case 'M': case 'm': argv[1][i-1]=0; target_size=(int)(atof(argv[1])*1024*1024); break; case 'k': case 'K': argv[1][i-1]=0; target_size=(int)(atof(argv[1])*1024); break; case '0'...'9': target_size=(int)(atof(argv[1])); break; default: printf("Unknown size input\n"); exit(1); } infp=fopen(argv[2], "rb"); outfp=fopen(argv[3], "wb"); if(!infp || !outfp) { printf("Open file error\n"); exit(1); } input_size=0; while(!feof(infp)) { i=fread(buffer, 1, 512, infp); if(i<0) { printf("Error in reading input file: err %d\n", i); exit(1); } if(i==0) continue; i=fwrite(buffer, 1, i, outfp); if(i<=0) { printf("Error in writing output file\n"); exit(1); } input_size+=i; } i=target_size-input_size; printf("Target input size in byte : %10d(0x%08x)\n", input_size, input_size); printf("Target output size in byte: %10d(0x%08x)\n", target_size, target_size); printf("Filling %-5d(0x%08x) bytes with hex 0x%02x\n", i, i,fill_char); if(i>4) { int k; unsigned char *marker; for(k=0;k<(i-4);k++) fputc(fill_char, outfp); marker=(unsigned char *)&input_size; fputc(marker[0], outfp); fputc(marker[1], outfp); fputc(marker[2], outfp); fputc(marker[3], outfp); } else if(i>0) { printf("Not enough space to insert size marker at bottom\n"); goto err; } else { printf("Target size smaller than the input file size\n"); goto err; } fclose(infp); fclose(outfp); return 0; err: fclose(infp); fclose(outfp);// unlink(argv[3]); exit(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -