此编程教会我如何编写的程序能后面跟参数执行!!!!! 另:mkimage 是添加0x40长度的头信息。
理解main(int argc, char *argv[]) 中argc argv[]的含义!argc 的个数包含函数名,输入参数,argv[0]函数名,argv[1~n]入参。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#ifdef __linux__
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#endif
#define MERGE_SIZE 128*1024 /* 减小到128k,给boot版本留空间 */
#define SEEK_START 0 /* offset from start of file */
#define SEEK_CURR 1 /* offset from current position */
#define SEEK_END 2 /* offset from end of file */
#define MERGE_XLOAD_AND_CPU_VERSION
int append(FILE *dest, FILE *source,size_t total_len)
{
size_t bytes;
size_t wrote_len=0;
static char temp[MERGE_SIZE];
while((bytes = fread(temp, sizeof(char), MERGE_SIZE, source))>0)
{
fwrite(temp,sizeof(char),bytes,dest);
wrote_len += bytes;
}
if(wrote_len < total_len)
{
char *ptmp =(char *)malloc(total_len - wrote_len);
memset(ptmp, 0xff, (total_len - wrote_len));
fwrite(ptmp,sizeof(char),(total_len - wrote_len),dest);
free(ptmp);
}
}
/*后面跟2个参数,1、输入文件,2、输出文件*/
int main (int argc, char *argv[])
{
FILE *pFileIn = NULL;
FILE *pFileOut = NULL;
FILE *pFileCpu = NULL;
int len = 0;
int alignLen = 0;
int iRet = -1;
size_t read_bytes;
if (argc != 3)//argc 的个数包含函数名,输入参数,3个
{
printf ("eg : ./AppendBin filein.bin fileout.bin \n");
return 1;
}
//只读方式打开一个二进制文件
pFileIn = fopen(argv[1], "rb");
if (NULL == pFileIn)
{
printf("Can't Open the File : %s!\n",argv[1]);
return -1;
}
//可读可写方式生成一个二进制文件
pFileOut = fopen(argv[2], "wb+");
if (NULL == pFileOut)
{
printf("AppendBin ERR fopen!\n");
fclose(pFileIn);
return -2;
}
if (0 != append(pFileOut,pFileIn,MERGE_SIZE)){
printf("AppendBin Error!\n");
fclose(pFileIn);
fclose(pFileOut);
return -3;
}
else{
printf("AppendBin done!\n");
iRet = 0;
}
fclose(pFileOut);
fclose(pFileIn);
return iRet;
}