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

📄 cku2tm.c

📁 早期freebsd实现
💻 C
字号:
#include	<signal.h>#include	<stdio.h>#include	<setjmp.h>#include	<sys/ioctl.h>#include	<sys/types.h>#include	<sys/time.h>#define	CTIME	1#define	ASCTIME	2#define	TZSET	3#define	LOCALTIME 4#define	GMTIME	5#define	OFFTIME	6extern	struct	tm	*offtime();	jmp_buf	env;	char	*cp, junk[52];	long	l, off;	int	timeout(), checkppid();	struct	tm	tmtmp, *tp;main()	{	register int i;	struct	itimerval it;	u_char	c;	signal(SIGPIPE, SIG_DFL);	for	(i = getdtablesize(); --i > 2; )		close(i);/* * Need a timer running while we disassociate from the control terminal * in case of a modem line which has lost carrier.*/	timerclear(&it.it_interval);	it.it_value.tv_sec = 5;	it.it_value.tv_usec = 0;	signal(SIGALRM, timeout);	setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);	if	(setjmp(env) == 0)		{		i = open("/dev/tty", 0);		if	(i >= 0)			{			ioctl(i, TIOCNOTTY, NULL);			close(i);			}		}/* * Now start a timer with one minute refresh.  In the signal service * routine, check the parent process id to see if this process has * been orphaned and if so exit.  This is primarily aimed at removing * the 'ctimed' process left behind by 'sendmail's multi-fork startup * but may prove useful in preventing accumulation of 'ctimed' processes * in other circumstances as well.  Normally this process is short * lived.*/	it.it_interval.tv_sec = 60;	it.it_interval.tv_usec = 0;	it.it_value.tv_sec = 60;	it.it_value.tv_usec = 0;	signal(SIGALRM, checkppid);	setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);	while	(read(fileno(stdin), &c, 1) == 1)		{		switch	(c)			{			case	CTIME:				l = 0L;				getb(fileno(stdin), &l, sizeof l);				cp = ctime(&l);				write(fileno(stdout), cp, 26);				break;			case	ASCTIME:				getb(fileno(stdin), &tmtmp, sizeof tmtmp);				cp = asctime(&tmtmp);				write(fileno(stdout), cp, 26);				break;			case	TZSET:				(void) tzset();				break;			case	LOCALTIME:				l = 0L;				getb(fileno(stdin), &l, sizeof l);				tp = localtime(&l);				write(fileno(stdout), tp, sizeof (*tp));				strcpy(junk, tp->tm_zone);				junk[24] = '\0';				write(fileno(stdout), junk, 24);				break;			case	GMTIME:				l = 0L;				getb(fileno(stdin), &l, sizeof l);				tp = gmtime(&l);				write(fileno(stdout), tp, sizeof (*tp));				strcpy(junk, tp->tm_zone);				junk[24] = '\0';				write(fileno(stdout), junk, 24);				break;			case	OFFTIME:				getb(fileno(stdin), &l, sizeof l);				getb(fileno(stdin), &off, sizeof off);				tp = offtime(&l, off);				write(fileno(stdout), tp, sizeof (*tp));				break;			default:				abort("switch");			}		}	}getb(f, p, n)	int	f;	register char	*p;	register int	n;	{	register int	i;	while	(n)		{		i = read(f, p, n);		if	(i <= 0)			return;		p += i;		n -= i;		}	}timeout()	{	longjmp(env, 1);	}checkppid()	{	if	(getppid() == 1)		exit(0);	}

⌨️ 快捷键说明

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