如何编写工具--合并文件、mkimage等

此编程教会我如何编写的程序能后面跟参数执行!!!!!   另: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;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值