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

📄 auto_cp.c

📁 自动侦测插入的存贮设备(U盘/移动硬盘等)
💻 C
📖 第 1 页 / 共 2 页
字号:
{	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 + -