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

📄 ecusighdl.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
					pputs("\n");				}				ecu_log_event(getpid(),s64);				errno = save_errno;				if(errno)					pperror("errno may not apply, but");			}		}		restore_initial_colors();	}	else							/* we are rcvr */	{		if(code > NSIG)		{		char s64[64];			sprintf(s64,"## RCVR %s, errno = %d",termecu_code_text(code),				save_errno);			setcolor(colors_error);			pputs(s64);			pputs("\n");			ecu_log_event(getpid(),s64);			errno = save_errno;			if(errno)				pperror("errno may not apply, but");		}		restore_initial_colors();		kill(xmtr_pid,SIGHUP);	}#ifdef linux	tcap_restore_con();#endif	exit(code);	/*NOTREACHED*/}	/* end of termecu */SIGTYPErcvr_common_signal_handler(){	extern int rcvr_log;	extern int rcvr_log_raw;	extern FILE *rcvr_log_fp;	if(rcvr_log)	{		if(!rcvr_log_raw)			fputs("\n",rcvr_log_fp);		fclose(rcvr_log_fp);	}	exit(0);}SIGTYPErcvr_SIGTERM_handler(){	rcvr_common_signal_handler();}SIGTYPErcvr_SIGINT_handler(){	signal(SIGINT,rcvr_SIGINT_handler);}SIGTYPErcvr_SIGUSR1_handler(){	rcvr_common_signal_handler();}SIGTYPErcvr_SIGUSR2_handler(){	signal(SIGUSR2,rcvr_SIGUSR2_handler);	shmr_process_rcvr_SIGUSR2();}SIGTYPErcvr_SIGHUP_handler(){	rcvr_common_signal_handler();}/*+-------------------------------------------------------------------------	rcvr_death_handler(sig) - unexpected signal; try to dump core--------------------------------------------------------------------------*/SIGTYPErcvr_death_handler(sig)int sig;{	int itmp;#ifdef TRICKY_SEGV	int *open_elevator_shaft = (int *)(shm - 1);#endif	ttymode(0);	ff(se,"\nreceiver process caught signal %s\r\n",	    signal_name_text(sig));	ff(se,"screen cursor (y,x) = (%u,%u)\r\n",shm->cursor_y,shm->cursor_x);	for(itmp = 1; itmp < NSIG; itmp++)		signal(itmp,SIG_DFL);#ifdef TRICKY_SEGV	signal(SIGSEGV,SIG_DFL);	printf("oes=%08lx\n",open_elevator_shaft);	itmp = *open_elevator_shaft;#else	kill((PID_T)getpid(),SIGIOT);#endif	_exit(-1);}	/* end of rcvr_death_handler *//*+-------------------------------------------------------------------------	xmtr_SIGINT_handler()--------------------------------------------------------------------------*/SIGTYPExmtr_SIGINT_handler(){	if(ttymode_termecu_on_sigint)		termecu(SIGINT);	signal(SIGINT,xmtr_SIGINT_handler);	sigint = 1;	proc_interrupt = 1;}	/* end of xmtr_SIGINT_handler */SIGTYPExmtr_SIGHUP_handler(sig)int sig;{	termecu(sig);}SIGTYPExmtr_SIGTERM_handler(sig)int sig;{	termecu(sig);}SIGTYPExmtr_SIGUSR2_handler(){	SIGTYPE xmtr_SIGUSR2_handler();	signal(SIGUSR2,xmtr_SIGUSR2_handler);	shmx_process_xmtr_SIGUSR2();}/*+-------------------------------------------------------------------------	xmtr_death_handler(sig) - unexpected signal; try to dump core--------------------------------------------------------------------------*/SIGTYPExmtr_death_handler(sig)int sig;{	int itmp;#ifdef TRICKY_SEGV	int *open_elevator_shaft = (int *)(shm - 1);#endif	ttymode(0);	ff(se,"\ntransmitter process caught signal %s\n",		signal_name_text(sig));	kill_rcvr_process(SIGUSR1);	for(itmp = 1; itmp < NSIG; itmp++)		signal(itmp,SIG_DFL);#ifdef TRICKY_SEGV	signal(SIGSEGV,SIG_DFL);	printf("oes=%08lx\n",open_elevator_shaft);	fflush(stdout);	itmp = *open_elevator_shaft;#else	kill((PID_T)getpid(),SIGIOT);#endif	termecu(sig);}	/* end of xmtr_death_handler *//*+-------------------------------------------------------------------------	xmtr_SIGCLD_handler()--------------------------------------------------------------------------*/SIGTYPExmtr_SIGCLD_handler(){#if defined(FORK_DEBUG)	char s40[40];#endifWAIT:	errno = 0;	if((last_child_wait_pid = wait(&last_child_wait_status)) < 0)	{		if(errno == EINTR)			goto WAIT;	}#if defined(FORK_DEBUG)	sprintf(s40,"DEBUG fork SIGCLD pid %d term %x",		last_child_wait_pid,last_child_wait_status);	ecu_log_event(getpid(),s40);		/* xmtr_SIGCLD_handler() */#endif	if((last_child_wait_pid == rcvr_pid) && !xmtr_killed_rcvr)	{		ff(se,"\r\nECU receiver process died unexpectedly\r\n");		termecu(TERMECU_RCVR_FATAL_ERROR);	}	signal(SIGCLD,xmtr_SIGCLD_handler);}	/* end of xmtr_SIGCLD_handler *//*+-------------------------------------------------------------------------	child_signals() - signal() calls for children processes--------------------------------------------------------------------------*/voidchild_signals(){	int isig;	for(isig = 0; isig < NSIG; isig++)		signal(isig,SIG_DFL);}	/* end of child_signals *//*+-------------------------------------------------------------------------	xmtr_signals()--------------------------------------------------------------------------*/voidxmtr_signals(){	int sig;	for(sig = 1; sig < NSIG; sig++)	{		switch(sig)		{			case SIGHUP:				signal(sig,xmtr_SIGHUP_handler);				break;#if	defined(SIGSTOP)			/*			 * call Roto-Rooter on POSIX plots			 */			case SIGSTOP:			case SIGTSTP:			case SIGCONT:			case SIGTTIN:			case SIGTTOU:				signal(sig,SIG_IGN);				break;#endif#ifdef SIGWINCH			case SIGWINCH:				signal(sig,SIG_DFL);				break;#endif			case SIGQUIT:				signal(sig,SIG_IGN);				break;			case SIGINT:				signal(sig,xmtr_SIGINT_handler);				break;			case SIGTERM:				signal(sig,xmtr_SIGTERM_handler);				break;			case SIGCLD:				signal(sig,xmtr_SIGCLD_handler);				break;			case SIGUSR1:				signal(sig,SIG_IGN);				break;			case SIGUSR2:				signal(sig,xmtr_SIGUSR2_handler);				break;			default:				signal(sig,xmtr_death_handler);				break;		}	}}	/* end of xmtr_signals *//*+-------------------------------------------------------------------------	rcvr_signals()--------------------------------------------------------------------------*/voidrcvr_signals(){	int sig;	for(sig = 1; sig < NSIG; sig++)	{		switch(sig)		{			case SIGHUP:				signal(sig,rcvr_SIGHUP_handler);				break;#if	defined(SIGSTOP)			case SIGSTOP:			case SIGTSTP:			case SIGCONT:			case SIGTTIN:			case SIGTTOU:				signal(sig,SIG_IGN);				break;#endif#ifdef SIGWINCH			case SIGWINCH:#endif			case SIGCLD:				signal(sig,SIG_DFL);				break;			case SIGQUIT:				signal(sig,SIG_IGN);				break;			case SIGINT:				signal(sig,rcvr_SIGINT_handler);				break;			case SIGTERM:				signal(sig,rcvr_SIGTERM_handler);				break;			case SIGUSR1:				signal(sig,rcvr_SIGUSR1_handler);				break;			case SIGUSR2:				signal(sig,rcvr_SIGUSR2_handler);				break;			default:				signal(sig,rcvr_death_handler);		}	}}	/* end of rcvr_signals *//* vi: set tabstop=4 shiftwidth=4: */

⌨️ 快捷键说明

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