📄 ftp_y.c
字号:
} //复制文件 //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 + -