stats.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 119 行

C
119
字号
# include "sendmail.h"SCCSID(@(#)stats.c	4.1		7/25/83);/***  Statistics structure.*/struct statistics{	time_t	stat_itime;		/* file initialization time */	short	stat_size;		/* size of this structure */	long	stat_nf[MAXMAILERS];	/* # msgs from each mailer */	long	stat_bf[MAXMAILERS];	/* kbytes from each mailer */	long	stat_nt[MAXMAILERS];	/* # msgs to each mailer */	long	stat_bt[MAXMAILERS];	/* kbytes to each mailer */};struct statistics	Stat;extern long		kbytes();	/* for _bf, _bt *//***  MARKSTATS -- mark statistics*/markstats(e, to)	register ENVELOPE *e;	register ADDRESS *to;{	if (to == NULL)	{		Stat.stat_nf[e->e_from.q_mailer->m_mno]++;		Stat.stat_bf[e->e_from.q_mailer->m_mno] += kbytes(CurEnv->e_msgsize);	}	else	{		Stat.stat_nt[to->q_mailer->m_mno]++;		Stat.stat_bt[to->q_mailer->m_mno] += kbytes(CurEnv->e_msgsize);	}}/***  POSTSTATS -- post statistics in the statistics file****	Parameters:**		sfile -- the name of the statistics file.****	Returns:**		none.****	Side Effects:**		merges the Stat structure with the sfile file.*/poststats(sfile)	char *sfile;{	register int fd;	struct statistics stat;	extern long lseek();	(void) time(&Stat.stat_itime);	Stat.stat_size = sizeof Stat;	fd = open(sfile, 2);	if (fd < 0)	{		errno = 0;		return;	}	if (read(fd, (char *) &stat, sizeof stat) == sizeof stat &&	    stat.stat_size == sizeof stat)	{		/* merge current statistics into statfile */		register int i;		for (i = 0; i < MAXMAILERS; i++)		{			stat.stat_nf[i] += Stat.stat_nf[i];			stat.stat_bf[i] += Stat.stat_bf[i];			stat.stat_nt[i] += Stat.stat_nt[i];			stat.stat_bt[i] += Stat.stat_bt[i];		}	}	else		bmove((char *) &Stat, (char *) &stat, sizeof stat);	/* write out results */	(void) lseek(fd, 0L, 0);	(void) write(fd, (char *) &stat, sizeof stat);	(void) close(fd);}/***  KBYTES -- given a number, returns the number of Kbytes.****	Used in statistics gathering of message sizes to try to avoid**	wraparound (at least for a while.....)****	Parameters:**		bytes -- actual number of bytes.****	Returns:**		number of kbytes.****	Side Effects:**		none.****	Notes:**		This function is actually a ceiling function to**			the nearest K.**		Honestly folks, floating point might be better.**			Or perhaps a "statistical" log method.*/longkbytes(bytes)	long bytes;{	return ((bytes + 999) / 1000);}

⌨️ 快捷键说明

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