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

📄 hc_main.c

📁 一个通过无线设备传输文件程序主要涉及内容是网络通信和RS232设置
💻 C
字号:
/** Copyright (c) 2004,wuxi xietong tech corp* All rights reserved.** filename:hc_main.c* content :1. exec all the server.* 	    2. watchdog for HC** version  :2.0* author   :hwz* date     :2004/03/01**/#include "common.h"#include "hc.h"#define HC_CHILD_SERV_CNT	1	char *hc_server_name[] = {			"rs232",			"ping",			NULL};int	sock_dog;struct sockaddr_un  addr_rec;struct sockaddr_un  addr_ping;int main(int argc, char *argv[]){	char	pname[64], *ptr;	int	fd;	int	on=1, ret, count;	int	pid, index, maxfd;	fd_set	readfds;	struct sockaddr_un  addr_un;	struct hc_event_msg_str  msg;	struct timeval	timev, timev2;	err_dump_init(HC_MAIN_LOG);	zx_daemon();	set_sighandler();	hc_global_init();	hc_global_init2();	index = 0;	while( hc_server_name[index]!= NULL ){        	if( argv[0][0]=='/' ){                	strcpy(pname, argv[0]);                	ptr = strrchr(pname, '/');                	ptr[1] = '\0';        	}else if( strrchr(argv[0], '/')==NULL ){                	pname[0] = '\0';        	}else{                	ptr = getenv("PWD");                	strcpy(pname, ptr);                	strcat(pname, "/");                	strcat(pname, argv[0]);                	ptr = strrchr(pname, '/');                	ptr[1] = '\0';        	}					strcat(pname, hc_server_name[index]);				err_dump(PRINT_ERROR, "exec[%d]: %s \n", index, pname);				pid = fork();		if( pid==0 ){			err_dump_close();			execlp(pname, hc_server_name[index], NULL);			ERR_DUMP();			exit(-1);		}		bzero(pname,64);		index ++;	}			unlink(HC_EVENT_WTDOG_SOCK);	sock_dog = socket(PF_UNIX, SOCK_DGRAM, 0);        setsockopt(sock_dog, SOL_SOCKET, SO_REUSEADDR,(char *)&on, sizeof(on));        addr_un.sun_family = AF_UNIX;        strcpy(addr_un.sun_path, HC_EVENT_WTDOG_SOCK);	ret = bind(sock_dog, (struct sockaddr *)&addr_un, sizeof(addr_un));	if( ret<0 ){		ERR_DUMP();		exit(-1);	}/* Set event address(5, one for each server) */		addr_rec.sun_family = AF_UNIX;	strcpy(addr_rec.sun_path, HC_EVENT_GENERAL_SOCK);//	addr_ping.sun_family = AF_UNIX;//	strcpy(addr_ping.sun_path,HC_KEY_SOCK);	sleep(10);	gettimeofday(&timev, NULL);	fd = open(DEV_NAME_WTDOG, O_WRONLY);	if( fd<0 ){		ERR_DUMP();		//exit(-1);	}	DEBUG_DUMP("Begin while ...");	while(1){	    msg.type = HC_EVENT_TYPE_DOG;	    msg.event_dog = HC_EVENT_DOG_MAGIC;	    sendto( sock_dog, (void *)&msg, sizeof(msg), 0, 	 	   (struct sockaddr *)&addr_rec, sizeof(addr_rec) );	//	   sendto( sock_dog, (void *)&msg, sizeof(msg), 0,//                    (struct sockaddr *)&addr_ping, sizeof(addr_ping) );           count = HC_CHILD_SERV_CNT;	    while(1){		FD_ZERO(&readfds);		FD_SET(sock_dog, &readfds);		maxfd = sock_dog;		ret = select(maxfd+1, &readfds, NULL, NULL, NULL);		if( ret<=0 ){			ERR_DUMP();			continue;		}         	if( !FD_ISSET(sock_dog, &readfds) )                        continue;		ret = recvfrom( sock_dog, (char *)&msg, sizeof(msg), 				0, NULL, NULL );		if( ret!=sizeof(msg) ){			ERR_DUMP();			continue;		}		if( msg.type!=HC_EVENT_TYPE_DOG )			continue;		if( msg.event_dog != HC_EVENT_DOG_MAGIC )			continue;		count --;		if( count==0 ){			/* avoid probe event too frequent */			gettimeofday(&timev2, NULL);			if( timev2.tv_sec-timev.tv_sec < 10 )				sleep( 10-(timev2.tv_sec-timev.tv_sec) );						gettimeofday(&timev, NULL);			err_dump(PRINT_ERROR,"***********is break\n");			/* Feed watch dog */			write(fd, NULL, 0);			break;		}	     }	}	close(fd);        close(sock_dog);}

⌨️ 快捷键说明

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