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

📄 ftp_y.c

📁 本程序为在linux下实现FTP传输文件的实现
💻 C
📖 第 1 页 / 共 2 页
字号:
		}				//复制文件		//comparedir(DHDDSTATION, DUSBSTATION, DTEMP, mediafile,1,0);		systemcall("rm -rf /busonline/hda1/station/*",1);		sprintf(cmdtmp,"cp -rf ");		strcat(cmdtmp,DUSBSTATION);		strcat(cmdtmp," ");		strcat(cmdtmp,DHDDMOUNT);		systemcall(cmdtmp,1);		if(comparedir(DHDDSTATION, DUSBSTATION, DTEMP, mediafile,0,1) != -1)		{		    systemcall("sync",1);		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);		    if(strlen(log_local.LogFile) > 0)		    {			writelog(log_local.LogFile,logbuf);		    }		    systemcall("killall -2 x x x",1);		    systemcall("sync",1);		    FedDog();		    sleep_my(30);		    FedDog();		    systemcall("sync",1);		    systemcall("killall -9 guard",1);		    systemcall("poweroff",0);		    //sleep(1);		    exit(0);		}		else		{		    remove(tmp);		}		systemcall("sync",1);	    }	}		//卸载USB存储设备	sprintf(tmp,DUSBMOUNT);	sprintf(cmdtmp,"umount %s 2>/dev/null",tmp);	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);	systemcall(cmdtmp,1);/***********************通过 ftp 更新***********************************************/	//挂载ftp	ftp_local.FTPMount = 0x01;	ftp_local.FTPFsrw = 1;	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);	systemcall("mount -n -o remount,rw / 2>/dev/null",1);	sprintf(cmdtmp,"lufsmount ftpfs://");	strcat(cmdtmp,upmedia.ftpuser);	strcat(cmdtmp,":");	strcat(cmdtmp,upmedia.ftppass);	strcat(cmdtmp,"@");	strcat(cmdtmp,upmedia.ftpip);	strcat(cmdtmp," ");	strcat(cmdtmp,DFTPMOUNT);	//"/busonline/ftp"	strcat(cmdtmp," 2>/dev/null");	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);	systemcall(cmdtmp,1);	IPC_ProcState_Read(PROCID_GUARD,main_shm,&main_local);	if(main_local.FTPFsrw != 1)	    systemcall("mount -n -o remount,ro / 2>/dev/null",1);	ftp_local.FTPFsrw = 0;	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);		//更新媒体文件	if(access(FTPMEDCONFIG,F_OK) != -1)	{	    char ver[16];	    int filenum;	    struct filename filename[100];	    int ifstopmedia;	    char logtmp[256];	    long vermedial,verl;	    //上传IP自举文件	    sprintf(tmp,DFTPIPRAISE);	    sprintf(cmdtmp,"%s/%s.ipp",tmp,upmedia.localip);	    remove(cmdtmp);			    sprintf(cmdtmp,"cp -f /tmp/%s.ipp %s",upmedia.localip,tmp);	    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);	    systemcall(cmdtmp,1);				    //上传日志文件	    sprintf(tmp,DHDDLOG);	    sprintf(logtmp,DFTPLOG);	    sprintf(cmdtmp,"mv -f %s/*.gz %s/ 2>/dev/null",tmp,logtmp);	    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);	    systemcall(cmdtmp,1);	    systemcall("sync",1);				    //读取版本信息	    GetPrivateProfileString("sig","version","0",upmedia.version,16,HDDMEDCONFIG);	    GetPrivateProfileString("sig","version","0",ver,16,FTPMEDCONFIG);	    verl = atol(ver);	    vermedial = atol(upmedia.version);	    if((vermedial == 0) || ((verl != 0) && (verl > vermedial)))	    {		//解析XML文件		char xmlfile[256];		int i,cpsuccess;		sprintf(tmp,DFTPPLCFG);		sprintf(xmlfile,"%s/%s.xml",tmp,upmedia.localip);		filenum = readxml(xmlfile, filename);		cpsuccess = 0;		ifstopmedia = 0;				ftp_local.FTPState = 0x01;		time(&(ftp_local.Proc_Info.ctime));		IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);						if(filenum < 0)		    cpsuccess = -1;						//检测硬盘剩余空间,删除不用的文件		if((getdiskfree(DHDDMOUNT) < FREESPACE) && (filenum>0))		{		    struct dirent **namelist;		    int n;							    n = scandir(DHDDMEDIA, &namelist, 0, alphasort);		    if (n < 0)			perror("scandir");		    else		    {			while(n--) 			{			    int temp,ifdel;			    ifdel = 1;			    for(temp=0; temp<filenum; temp++)			    {				if(strcmp(namelist[n]->d_name,filename[temp].name) == 0)				    ifdel = 0;				if((strcmp(namelist[n]->d_name,".") == 0) || (strcmp(namelist[n]->d_name,"..") == 0))				    ifdel = 0;			    }			    if(ifdel == 1)			    {				char tempc[256];				sprintf(tempc,DHDDMOUNT);				strcat(tempc,"/media/");				strcat(tempc,namelist[n]->d_name);				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);				remove(tempc);			    }			    free(namelist[n]);			}			free(namelist);		    }							}				//依次处理每个文件		for(i=0; i<filenum; i++)		{		    char filesrc[100],fileold[100];		    sprintf(filesrc,DFTPMEDIA);		    strcat(filesrc,"/");		    strcat(filesrc,filename[i].name);		    		    sprintf(fileold,DHDDMOUNT);		    strcat(fileold,"/media/");		    strcat(fileold,filename[i].name);		    		    if(access(filesrc,F_OK) != -1)		    {			//比较文件大小,如果不同,就复制			if(comparefilesize(fileold,filesrc) != 0)			{			    //进程通讯			    if(ifstopmedia == 0)			    {				char exitbuf[2];				exitbuf[0] = 0x00;				exitbuf[1] = 0x05;								IPC_ProcState_Read(PROCID_MEDIA,media_shm,&media_local);				if((media_local.Proc_Info.PID > 0) &&(kill(media_local.Proc_Info.PID,0) == 0))				    MSGQ_Send(PROCID_MEDIA,exitbuf,2);				sleep(TIMEOUT);				if(media_local.Proc_Info.PID > 0)				    kill(media_local.Proc_Info.PID,SIGKILL);				ifstopmedia = 1;				sleep(1);				waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);			    }			    			    {				int ftptimeout,ftpretry;				ftptimeout = FTPTIMEOUT;				ftpretry = FTPRETRY;								mkdirp(DHDDMEDIA);				sprintf(tmp,DHDDMEDIA);				sprintf(cmdtmp,"wget -q -T %d -t %d -P %s --retry-connrefused --ftp-user=%s --ftp-password=%s -c ftp://%s/media/%s",					ftptimeout,					ftpretry,					tmp,					upmedia.ftpuser,					upmedia.ftppass,					upmedia.ftpip,					filename[i].name);				DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);				systemcall(cmdtmp,1);				systemcall("sync",1);			    }			}			//复制完成后再次比较大小			if(comparefilesize(fileold,filesrc) != 0)			    cpsuccess = -1;		    }		    else			cpsuccess = -1;		}		//升级版本文件和播放控制xml文件		if(cpsuccess == 0)		{		    mkdirp(DHDDCONFIG);		    sprintf(tmp,"cp -f ");		    strcat(tmp,FTPMEDCONFIG);		    strcat(tmp," ");		    strcat(tmp,HDDMEDCONFIG);		    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",tmp);		    systemcall(tmp,1);		    systemcall("sync",1);		    		    sprintf(tmp,"cp -f ");		    strcat(tmp,xmlfile);		    strcat(tmp," ");		    strcat(tmp,DHDDCONFIG);		    DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",tmp);		    systemcall(tmp,1);		    systemcall("sync",1);		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);		    if(strlen(log_local.LogFile) > 0)		    {			writelog(log_local.LogFile,logbuf);		    }		    systemcall("killall -2 x x x",1);		    systemcall("sync",1);		    FedDog();		    sleep_my(30);		    FedDog();		    systemcall("sync",1);		    systemcall("killall -9 guard",1);		    systemcall("poweroff",0);		    //sleep(1);		    exit(0);		}	    }	}	//ftp 更新报站文件	sprintf(tmp,DFTPSTATION);	strcat(tmp,"/zzver.ini");	if(access(tmp,F_OK) != -1)	{	    char sverh[256],sverf[256];	    GetPrivateProfileString("STATION","VERSION","0.01",sverf,50,tmp);	    sprintf(tmp,DHDDSTATION);	    strcat(tmp,"/zzver.ini");	    GetPrivateProfileString("STATION","VERSION","0.01",sverh,50,tmp);	    if((access(tmp,F_OK) == -1) || (strcmp(sverf,sverh) > 0))	    {		remove(tmp);		int ftptimeout,ftpretry;		struct fileattr mediafilef[MAXFILENUM];		char cmdftp[256];		//结束媒体播放进程		char exitbuf[2];		exitbuf[0] = 0x00;		exitbuf[1] = 0x05;		ftp_local.FTPState = 0x01;		time(&(ftp_local.Proc_Info.ctime));		IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);				IPC_ProcState_Read(PROCID_MEDIA,media_shm,&media_local);		if((media_local.Proc_Info.PID > 0) &&(kill(media_local.Proc_Info.PID,0) == 0))		    MSGQ_Send(PROCID_MEDIA,exitbuf,2);		sleep(TIMEOUT);		if(media_local.Proc_Info.PID > 0)		    kill(media_local.Proc_Info.PID,SIGKILL);		sleep(1);		waitpid(media_local.Proc_Info.PID,NULL,WNOHANG);				//检测硬盘剩余空间,删除不用的报站文件		if(getdiskfree(DHDDMOUNT) < FREESPACE)		{		    struct dirent **namelist, **namelisthdd;		    int n,m;							    m = scandir(DFTPSTATION, &namelist, 0, alphasort);		    n = scandir(DHDDSTATION, &namelisthdd, 0, alphasort);		    		    if((m>0) && (n>0))		    {			while(n--) 			{			    int temp,ifdel;			    ifdel = 1;			    for(temp=0; temp<m; temp++)			    {				if((strcmp(namelisthdd[n]->d_name,".") == 0) || (strcmp(namelisthdd[n]->d_name,"..") == 0))				{				    ifdel = 0;				    break;				}				if(strcmp(namelisthdd[n]->d_name,namelist[temp]->d_name) == 0)				{				    ifdel = 0;				    break;				}			    }			    if(ifdel == 1)			    {				char tempc[256];				sprintf(tempc,DHDDSTATION);				strcat(tempc,"/");				strcat(tempc,namelisthdd[n]->d_name);				DEBUG_BUS(ifdebug,"FTP: remove %s\n",tempc);				remove(tempc);			    }			    free(namelisthdd[n]);			}			free(namelist);			free(namelisthdd);		    }							}				//断点续传文件		/*ftptimeout = FTPTIMEOUT;		  ftpretry = FTPRETRY;		  sprintf(tmp,DHDDSTATION);		  sprintf(cmdftp,"wget -r -nH --cut-dirs=2 -q -T %d -t %d -P %s --retry-connrefused --ftp-user=%s --ftp-password=%s -c ftp://%s/teamgo/station/*",		  ftptimeout,		  ftpretry,		  tmp,		  upmedia.ftpuser,		  upmedia.ftppass,		  upmedia.ftpip);		  DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdftp);		  systemcall(cmdftp,1);		  systemcall("sync",1);*/		systemcall("rm -rf /busonline/hda1/station/*",1);		sprintf(cmdtmp,"cp -rf ");		strcat(cmdtmp,DFTPSTATION);		strcat(cmdtmp," ");		strcat(cmdtmp,DHDDMOUNT);		systemcall(cmdtmp,1);		if(comparedir(DHDDSTATION, DFTPSTATION, DTEMP, mediafilef,0,1) != -1)		{		    systemcall("sync",1);		    systemcall("killall -9 cp mv keyb gps mplayer mplayers media busDispatch log showfont lufsd lufsmount lufsmnt lufsumount",1);		    IPC_ProcState_Read(PROCID_LOG,log_shm,&log_local);		    if(strlen(log_local.LogFile) > 0)		    {			writelog(log_local.LogFile,logbuf);		    }		    systemcall("killall -2 x x x",1);		    systemcall("sync",1);		    FedDog();		    sleep_my(30);		    FedDog();		    systemcall("sync",1);		    systemcall("killall -9 guard",1);		    systemcall("poweroff",0);		    //sleep(1);		    exit(0);		}		else		{		    remove("/busonline/hda1/station/zzver.ini");		}	    }	}	//卸载ftp	ftp_local.FTPFsrw = 1;	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);	systemcall("mount -n -o remount,rw / 2>/dev/null",1);	sprintf(cmdtmp,"lufsumount ");	strcat(cmdtmp,DFTPMOUNT);	strcat(cmdtmp," 2>/dev/null");	DEBUG_BUS(ifdebug,"FTP: cmd = %s\n",cmdtmp);	systemcall(cmdtmp,1);	systemcall(cmdtmp,1);	IPC_ProcState_Read(PROCID_GUARD,main_shm,&main_local);	if(main_local.FTPFsrw != 1)	    systemcall("mount -n -o remount,ro / 2>/dev/null",1);	//systemcall("killall -9 lufsd lufsmnt lufsmount lufsumount 2>/dev/null",1);	ftp_local.FTPFsrw = 0;	ftp_local.FTPMount = 0x00;	IPC_ProcState_Write(PROCID_FTP,ftp_shm,&ftp_local);    }    sleep(10);    goto ftpstart;    return 0;}

⌨️ 快捷键说明

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