⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update.c

📁 用在X86芯片的嵌入式系统中的自动更新程序
💻 C
字号:
#include "includes.h"
int copyFile(char * source,char * dest);

//文件下载程序
void main (void)
{
    char FTPSvrIP[16];
    char filename[12],downfile[12],runfile[16],localfile[30];
    char LoginID[20],LoginPassword[20];
    char FTPDir[64];
    char showmsg[64];
    char newversion[10],oldversion[10],filepackage[12],filevar[6];
    int filenum=0,i=0;
    FILE *fp;
    //清楚屏幕
    clrscr();
    printf("System update......\n");
    printf("checking......\n");
    
    //等待5秒中
    sleep(5);
    //服务器 登陆 信息     
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "FTPSvrIP", 0, FTPSvrIP) )
      strcpy(FTPSvrIP, "0.0.0.0" );
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "loginUser", 0, LoginID) )
      strcpy(LoginID, "update" );
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "Password", 0,LoginPassword) )
      strcpy(LoginPassword, "update" );
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "upFile", 0,filename) )
      strcpy(filename, "upFile.ini" );
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "version", 0,oldversion) )
      strcpy(oldversion, "1.0" );
    if( ReadIni.GetField( UPDATE_FILE_NAME, "[UPDATE]", "FTPDir", 0,FTPDir) )
      strcpy(FTPDir, "" );
    printf("checking...sucess\n"); 
    
    //初始网络
    printf("init net......\n");
    InitCommunication(CONFIG_FILE_NAME);
    printf("init net...sucess\n");
    //从服务器读升级文件
    printf("download ini......\n");
    if(!FTP_getput(FTPSvrIP,filename,0,FTPDir,LoginID,LoginPassword))
    {
    	  //读升级文件的版本信息
    	  printf("download ini...sucess\n");
    	  if( ReadIni.GetField( filename, "[UPDATE]", "version", 0,newversion) )
      		strcpy(newversion, oldversion );
      	  //服务器版本和本地版本比较	
      	  if(strcmp(newversion,oldversion)>0)
      	  {
      	    //读本次升级的文件数	
	      if( ReadIni.GetField( filename, "[UPDATE]", "filenum", 0,filenum) )
	      	filenum=0;
	      //本次版本段,如:[1.0.0]	
	      sprintf(filepackage,"[%s]",newversion);
	      
	      //循环下载文件
	      for( i=0;i<filenum;i++)
	      {
		    sprintf(filevar,"file%d",i + 1);     
		    
		    if(!ReadIni.GetField( filename, filepackage, filevar, 0,downfile) )
		     { 
	      	    	sprintf(showmsg,"download %s file...\n",downfile);
	      	    	printf(showmsg);
	      	    	if(FTP_getput(FTPSvrIP,downfile,1,FTPDir,LoginID,LoginPassword)) 
	      	    	{
	           	    	sprintf(showmsg,"download %s file...fail\n",downfile);
		      	    	printf(showmsg);
				break;
	      	    	}
           	    	sprintf(showmsg,"download %s file...sucess\n",downfile);
	      	    	printf(showmsg);

	      	      }
	      	}
      	  }else{
	            //当版本不需要升级的时候,恢复正常运行程序
		    fp=fopen(START_RUN_EXE,"wt");
		    if(fp!=NULL) {
		    	fputs(RUN_EXE_NAME,fp);
		        fclose(fp);
		     } 
		     remove(filename);
		    //断开网络
		     TermCommunication();
		     SysReboot();		     
		      	  
      	  
      	  }
      	  
      	 //文件下载成功 
      	 if(i==filenum&&filenum>0)
    	 {
	     printf("setuping......\n");	
	      //循环拷贝文件
	      for( i=0;i<filenum;i++)
	      {
		    sprintf(filevar,"file%d",i + 1);     
		    
		    if(!ReadIni.GetField( filename, filepackage, filevar, 0,downfile) )
		     { 
	      	    	sprintf(runfile,"..\\%s",downfile);
	      	    	if (copyFile(downfile,runfile)!=0) break;
	      	    	remove(downfile);
	      	    	
	      	      }
	      }
	     //文件拷贝成功 
	     if(i==filenum&&filenum>0)
    	     {
	            printf("setuping...sucess\n");
	            //恢复正常运行程序
		    fp=fopen(START_RUN_EXE,"wt");
		    if(fp!=NULL) {
		    	fputs(RUN_EXE_NAME,fp);
		        fclose(fp);
		     } 
    	      }else{
    	      	printf("setuping...fail\n");
    	      } 
    	}
    }else{
   	printf("download ini...fail\n"); 
	}
   remove(filename);
    //断开网络
   TermCommunication();
   SysReboot();
}

//复制文件
int copyFile(char * source,char * dest)
{

FILE *fp1,*fp2; 
char ch;
fp1=fopen(source,"rb");
if(fp1!=NULL)
{
	fp2=fopen(dest,"wb");
	if(fp2!=NULL)
	{	
		ch=fgetc(fp1);
		while(!feof(fp1))
		    {
		    	fputc(ch,fp2); 
		    	ch=fgetc(fp1);
		    	}
		fclose(fp2); 
		fclose(fp1);
		return 0;
	}
	
	fclose(fp1);
	return -2;
}
 return -1;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -