📄 auto_cp.c
字号:
{ char tmp[156]; char result[128]; int i=0; sprintf(tmp,"cd /"); system(tmp); sprintf(tmp,"umount /mnt/usb 2>&1 "); //printf("[umount_usb]: CMD=%s\n",tmp); while(1) { i++; my_system(tmp,result,128); if ((strlen(result) == 0) || (i>3)) { break; } sleep(1); } if (strlen(result) == 0) { printf("[umount_usb]:umount success: i=%d\n",i); return 0; } else { printf("[umount_usb]:umount fail: i=%d\n",i); perror("[umount_usb]"); return -1; }}int usb_cp_video(char *local_dir,char *usb_dir,char *list_dir,char *cp_list,char *new_list_dir ){ char tmp[156]; char result[128]; char video_list[56]; int i=0; //strcpy(new_list_dir,list_dir); //拷贝节目 sprintf(tmp,"cp -rf /mnt/usb/%s/*.mpg %s 2>&1;cd /",usb_dir,local_dir); //printf("[usb_cp_video]: CMD=%s\n",tmp); while(1) { i++; my_system(tmp,result,128); if ((strlen(result) == 0) || (i>3)) { break; } sleep(1); } if (strlen(result) == 0) { sprintf(tmp,"ls /mnt/usb/%s/*.mpg",usb_dir); my_system(tmp,cp_list,1024); sprintf(log_tmp,"[usb_cp_video]:usb_cp_video success",i); logfile(log_tmp); printf("[usb_cp_video]:usb_cp_video success\n",i); } else { printf("[usb_cp_video]:usb_cp_video fail: i=%d\n",i); sprintf(log_tmp,"[usb_cp_video]:usb_cp_video fail: i=%d",i); logfile(log_tmp); perror("[usb_cp_video]"); return -1; } return 0; }int auto_cp(){ int ret; int len; int count=0; pid_t rpid=0; struct msgqueue msgbuf; int conf_msgid; char LOCALDIR[256]; char USBDIR[256]; char MACHINETYPE[256]; char LISTDIR[256]; FILE *list_dir_fp; char list_dir_cmd[256]; char tmp_video_list[128]; char tmp_video_list_name[128]; char usb_dir_tmp[128]; char video_list[1024]; char new_list_dir[128]; time_t first_msg=0; time_t last_msg=0; time_t now_time=0; sprintf(log_tmp,"[auto_cp]:==============start=================="); logfile(log_tmp); signal(SIGPIPE,SIG_IGN); signal(SIGCHLD, waitchild); /*脱离终端并记录进程号*///#ifndef __DEBUG__ if(fork()==0) { setsid(); setpgrp(); } else exit(0);//#endif if(readfield(PORTCONF,"COMMON","USBDIR",USBDIR)!=0) { printf("[auto_cp]:USBDIR=%s\n",USBDIR); }else { strcpy(USBDIR,"/conf/download/"); printf("[auto_cp]:Can't open config file!\n"); printf("[auto_cp]:USBDIR=%s \n",USBDIR); } if(readfield(PORTCONF,"COMMON","LOCALDIR",LOCALDIR)!=0) { printf("[auto_cp]:LOCAL download save dir=%s\n",LOCALDIR); }else { strcpy(LOCALDIR,"/conf/download/"); printf("[auto_cp]:Can't open config file!\n"); printf("[auto_cp]:LOCALDIR=%s \n",LOCALDIR); } // #SERVER or DECODECLIENT// MACHINETYPE=DECODECLIENT //LISTDIR=/trainet/actlist if(readfield(PORTCONF,"COMMON","LISTDIR",LISTDIR)!=0) { printf("[auto_cp]:LISTDIR=%s\n",LISTDIR); }else { strcpy(LISTDIR,"/trainet/actlist_org"); printf("[auto_cp]:Can't open config file!\n"); printf("[auto_cp]:LISTDIR=%s \n",LISTDIR); } if(readfield(PORTCONF,"COMMON","MACHINETYPE",MACHINETYPE)!=0) { machine_type = atol(MACHINETYPE); printf("[auto_cp]:MACHINETYPE=%d [SERVER:0|DECODECLIENT:1]\n",machine_type); }else { machine_type = 1;//DECODECLIENT printf("[auto_cp]:Can't open config file!\n"); printf("[auto_cp]:MACHINETYPE=%d [SERVER:0|DECODECLIENT:1]\n",machine_type); } //msg conf_msgid = msgget((key_t)MSGKEY_RECVTOMANG/*接收来自recv_store_server的心跳*/,IPC_CREAT|IPC_NOWAIT); if(conf_msgid == -1) { perror("[auto_cp]:MSGKEY_RECVTOMANG: msgget()n" ); exit(1); } /////////////////// //if((rpid=fork())==0)/**/ //{ //printf("[auto_cp]:start get_usb_status_kmsg thread!\n"); //get_usb_status_kmsg(); //printf("[auto_cp]:stop get_usb_status_kmsg thread!\n"); // exit(0); //} if((rpid=fork())==0)/**/ { printf("[auto_cp]:start get_usb_status_df thread!\n"); get_usb_status_df(); printf("[auto_cp]:stop get_usb_status_df thread!\n"); exit(0); } last_msg=time(0); for(;;) { memset(&msgbuf,0,sizeof(struct msgqueue)); ret = msgrcv(conf_msgid,&msgbuf,sizeof(struct msgqueue),1,IPC_NOWAIT ); usleep(100000); if(ret==-1) { usleep(200000); continue; } now_time=time(0); if(msgbuf.body==0/*来自热recv_store_server的常心跳*/) { //printf("[auto_cp]:Receive MSG:Other\n"); last_msg=now_time; }else if((msgbuf.body==INSERT/*来自热get_usb_status的MSG*/)) { system("mount /dev/sda10 /mnt/usb >/dev/null 2>&1"); //system("mount /dev/sda10 /mnt/usb "); printf("[auto_cp]:Receive MSG:INSERT\n"); sprintf(log_tmp,"[auto_cp]:Receive MSG:INSERT"); logfile(log_tmp); last_msg=now_time; }else if((msgbuf.body==REMOVE/*来自热get_usb_status的MSG*/)) { printf("[auto_cp]:Receive MSG:REMOVE\n"); sprintf(log_tmp,"[auto_cp]:Receive MSG:REMOVE"); logfile(log_tmp); usb_be_removed=1; umount_usb(); last_msg=now_time; }else if((msgbuf.body == FINDDISK/*来自热get_usb_status的MSG*/)) { int count=0; char usb_dev[156]; printf("[auto_cp]:Receive MSG:FINDDISK,usb_dev=%s\n",msgbuf.dev); sprintf(log_tmp,"[auto_cp]:Receive MSG:FINDDISK,usb_dev=%s",msgbuf.dev); logfile(log_tmp); beep_usb_handle_end(USB_HANDLE_START); //mount usb. if fail, try 3 sprintf(usb_dev,"%s",msgbuf.dev); if (-1 == mount_usb(usb_dev)) { beep_usb_handle_end(USB_HANDLE_FAIL); goto FINDDISK_end; } //copy video if (-1 == (ret=usb_cp_video(LOCALDIR,USBDIR,LISTDIR,video_list,new_list_dir))) { beep_usb_handle_end(USB_HANDLE_FAIL); goto FINDDISK_end; }else { printf("[auto_cp]:copy video and video_list success:\n"); printf("%s\n",video_list); sprintf(log_tmp,"[auto_cp]:copy video and video_list success"); logfile(log_tmp); } //handle video list //获取播放列表文件,并处理///////////////////////// //sleep(100); sprintf(usb_dir_tmp,"/mnt/usb/%s",USBDIR); sprintf(list_dir_cmd,"cd %s ;ls *.txt 2>&1|grep -v such",LISTDIR); //printf("[auto_cp]:list_dir_cmd:%s\n",list_dir_cmd); list_dir_fp = popen(list_dir_cmd,"r"); if(list_dir_fp==NULL) { printf("[auto_cp]:fopen error:%s\n",list_dir_cmd); sprintf(log_tmp,"[auto_cp]:fopen error:%s",list_dir_cmd); logfile(log_tmp); perror("[auto_cp]"); goto FINDDISK_end; } while(1) { fgets(tmp_video_list,128,list_dir_fp); trim(tmp_video_list); if (strlen(tmp_video_list)!=0) { sprintf(tmp_video_list_name,"%s/%s",LISTDIR,tmp_video_list); printf("[auto_cp]:will handle_video_list:%s.......\n",tmp_video_list_name); if ((ret=handle_video_list(tmp_video_list_name,usb_dir_tmp)) >= 0) { printf("[auto_cp]:video_list %s handle success:%s\n",tmp_video_list); sprintf(log_tmp,"[auto_cp]:video_list %s handle success:%s",tmp_video_list_name); logfile(log_tmp); }else { printf("[auto_cp]:video_list update fail:%s\n",tmp_video_list_name); sprintf(log_tmp,"[auto_cp]:video_list update fail:%s\n",tmp_video_list_name); logfile(log_tmp); //beep_usb_handle_end(USB_HANDLE_FAIL); //goto FINDDISK_end; } } strcpy(tmp_video_list,""); if(feof(list_dir_fp)) break; } pclose(list_dir_fp); ////////////////////////////////////// // sleep(1);// umount_usb(); beep_usb_handle_end(USB_HANDLE_SUCCESS); FINDDISK_end: last_msg=now_time; }else { printf("[auto_cp]:Receive MSG:UNKNOW\n"); last_msg=now_time; } if(((now_time-last_msg)>600/*10分钟没收到来自recv_store_server的心跳*/ )/*来自热recv_store_server的异常心跳*/ ) { printf("[auto_cp]:%d-%d=%d secs\n",now_time,last_msg,now_time-last_msg); printf("[auto_cp]:the thread have not receive data for 10 minutes,restart now!\n"); last_msg=now_time; kill(rpid,SIGTERM); sleep(3); count++; //if(count==20) //( printf("[auto_cp]:restart count=%d\n",count); //} if((rpid=fork())==0) { get_usb_status_df(); } } }//end for }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -