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

📄 tickadj.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 2 页
字号:
				      ktick,#ifdef K_TICK_NAME				      K_TICK_NAME#else				      "<this can't happen>"#endif							      );		}#ifdef PRESET_TICK		(void) printf("PRESET tick = %d usec\n", tick);#endif /* PRESET_TICK */		if (tickadj_offset != 0)		{			(void) printf("KERNEL tickadj = %d usec (from %s kernel variable)\n",				      ktickadj,#ifdef K_TICKADJ_NAME				      K_TICKADJ_NAME#else				      "<this can't happen>"#endif				      );		}#ifdef PRESET_TICKADJ		(void) printf("PRESET tickadj = %d usec\n", tickadj);#endif /* PRESET_TICKADJ */		if (dosync_offset != 0)		{			(void) printf("dosynctodr is %s\n", dosynctodr ? "on" : "off");		}		if (noprintf_offset != 0)		{			(void) printf("kernel level printf's: %s\n",				      noprintf ? "off" : "on");		}	}	if (tick <= 0)	{		(void) fprintf(stderr, "%s: the value of tick is silly!\n",			       progname);		exit(1);	}	hz_int = (int)(1000000L / (long)tick);	hz_hundredths = (int)((100000000L / (long)tick) - ((long)hz_int * 100L));	if (!quiet)	{		(void) printf("KERNEL hz = %d\n", hz);		(void) printf("calculated hz = %d.%02d Hz\n", hz_int,			      hz_hundredths);	}#if defined SCO5_CLOCK	recommend_tickadj = 100;#else /* SCO5_CLOCK */	tmp = (long) tick * 500L;	recommend_tickadj = (int)(tmp / 1000000L);	if (tmp % 1000000L > 0)	{		recommend_tickadj++;	}#ifdef MIN_REC_TICKADJ	if (recommend_tickadj < MIN_REC_TICKADJ)	{		recommend_tickadj = MIN_REC_TICKADJ;	}#endif /* MIN_REC_TICKADJ */#endif /* SCO5_CLOCK */  	if ((!quiet) && (tickadj_offset != 0))	{		(void) printf("recommended value of tickadj = %d us\n",			      recommend_tickadj);	}	if (   writetickadj == 0	       && !writeopttickadj	       && !unsetdosync	       && writetick == 0	       && !setnoprintf)	{		exit(errflg ? 1 : 0);	}	if (writetickadj == 0 && writeopttickadj)	{		writetickadj = recommend_tickadj;	}	fd = openfile(file, O_WRONLY);	if (setnoprintf && (noprintf_offset != 0))	{		if (!quiet)		{			(void) fprintf(stderr, "setting noprintf: ");			(void) fflush(stderr);		}		writevar(fd, noprintf_offset, 1);		if (!quiet)		{			(void) fprintf(stderr, "done!\n");		}	}	if ((writetick > 0) && (tick_offset != 0))	{		if (!quiet)		{			(void) fprintf(stderr, "writing tick, value %d: ",				       writetick);			(void) fflush(stderr);		}		writevar(fd, tick_offset, writetick);		if (!quiet)		{			(void) fprintf(stderr, "done!\n");		}	}	if ((writetickadj > 0) && (tickadj_offset != 0))	{		if (!quiet)		{			(void) fprintf(stderr, "writing tickadj, value %d: ",				       writetickadj);			(void) fflush(stderr);		}#ifdef SCO5_CLOCK		/* scale from usec/tick to nsec/sec */		writetickadj *= (1000L * HZ);#endif /* SCO5_CLOCK */		writevar(fd, tickadj_offset, writetickadj);		if (!quiet)		{			(void) fprintf(stderr, "done!\n");		}	}	if (unsetdosync && (dosync_offset != 0))	{		if (!quiet)		{			(void) fprintf(stderr, "zeroing dosynctodr: ");			(void) fflush(stderr);		}		writevar(fd, dosync_offset, 0);		if (!quiet)		{			(void) fprintf(stderr, "done!\n");		}	}	(void) close(fd);	return(errflg ? 1 : 0);}/* * getoffsets - read the magic offsets from the specified file */static voidgetoffsets(	off_t *tick_off,	off_t *tickadj_off,	off_t *dosync_off,	off_t *noprintf_off	){#ifndef NOKMEM# ifndef HAVE_KVM_OPEN	const char **kname;# endif#endif#ifndef NOKMEM# ifdef NLIST_NAME_UNION#  define NL_B {{#  define NL_E }}# else#  define NL_B {#  define NL_E }# endif#endif#define K_FILLER_NAME "DavidLetterman"#ifdef NLIST_EXTRA_INDIRECTION	int i;#endif#ifndef NOKMEM	static struct nlist nl[] =	{		NL_B#ifdef K_TICKADJ_NAME#define N_TICKADJ	0		K_TICKADJ_NAME#else		K_FILLER_NAME#endif		NL_E,		NL_B#ifdef K_TICK_NAME#define N_TICK		1		K_TICK_NAME#else		K_FILLER_NAME#endif		NL_E,		NL_B#ifdef K_DOSYNCTODR_NAME#define N_DOSYNC	2		K_DOSYNCTODR_NAME#else		K_FILLER_NAME#endif		NL_E,		NL_B#ifdef K_NOPRINTF_NAME#define N_NOPRINTF	3		K_NOPRINTF_NAME#else		K_FILLER_NAME#endif		NL_E,		NL_B "" NL_E,	};#ifndef HAVE_KVM_OPEN	static const char *kernels[] =	{#ifdef HAVE_GETBOOTFILE		NULL,			/* *** SEE BELOW! *** */#endif		"/kernel/unix",		"/kernel",		"/vmunix",		"/unix",		"/mach",		"/hp-ux",		"/386bsd",		"/netbsd",		"/stand/vmunix",		"/bsd",		NULL	};#endif /* not HAVE_KVM_OPEN */#ifdef HAVE_KVM_OPEN	/*	 * Solaris > 2.5 doesn't have a kernel file.  Use the kvm_* interface	 * to read the kernel name list. -- stolcke 3/4/96	 */	kvm_t *kvm_handle = kvm_open(NULL, NULL, NULL, O_RDONLY, progname);	if (kvm_handle == NULL)	{		(void) fprintf(stderr,			       "%s: kvm_open failed\n",			       progname);		exit(1);	}	if (kvm_nlist(kvm_handle, nl) == -1)	{		(void) fprintf(stderr,			       "%s: kvm_nlist failed\n",			       progname);		exit(1);	}	kvm_close(kvm_handle);#else /* not HAVE_KVM_OPEN */#ifdef HAVE_GETBOOTFILE		/* *** SEE HERE! *** */	if (kernels[0] == NULL)	{		char * cp = (char *)getbootfile();		if (cp)		{			kernels[0] = cp;		}		else		{			kernels[0] = "/Placeholder";		}	}#endif /* HAVE_GETBOOTFILE */	for (kname = kernels; *kname != NULL; kname++)	{		struct stat stbuf;		if (stat(*kname, &stbuf) == -1)		{			continue;		}		if (nlist(*kname, nl) >= 0)		{			break;		}		else		{			(void) fprintf(stderr,				       "%s: nlist didn't find needed symbols from <%s>: %s\n",				       progname, *kname, strerror(errno));		}	}	if (*kname == NULL)	{		(void) fprintf(stderr,			       "%s: Couldn't find the kernel\n",			       progname);		exit(1);	}#endif /* HAVE_KVM_OPEN */	if (dokmem)	{		file = kmem;		fd = openfile(file, O_RDONLY);#ifdef NLIST_EXTRA_INDIRECTION		/*		 * Go one more round of indirection.		 */		for (i = 0; i < (sizeof(nl) / sizeof(struct nlist)); i++)		{			if ((nl[i].n_value) && (nl[i].n_sclass == 0x6b))			{				readvar(fd, nl[i].n_value, &nl[i].n_value);			}		}#endif /* NLIST_EXTRA_INDIRECTION */	}#endif /* not NOKMEM */	*tickadj_off  = 0;	*tick_off     = 0;	*dosync_off   = 0;	*noprintf_off = 0;#if defined(N_TICKADJ)	*tickadj_off = nl[N_TICKADJ].n_value;#endif#if defined(N_TICK)	*tick_off = nl[N_TICK].n_value;#endif#if defined(N_DOSYNC)	*dosync_off = nl[N_DOSYNC].n_value;#endif#if defined(N_NOPRINTF)	*noprintf_off = nl[N_NOPRINTF].n_value;#endif	return;}#undef N_TICKADJ#undef N_TICK#undef N_DOSYNC#undef N_NOPRINTF/* * openfile - open the file, check for errors */static intopenfile(	const char *name,	int mode	){	int ifd;	ifd = open(name, mode);	if (ifd < 0)	{		(void) fprintf(stderr, "%s: open %s: ", progname, name);		perror("");		exit(1);	}	return ifd;}/* * writevar - write a variable into the file */static voidwritevar(	int ofd,	off_t off,	int var	){		if (lseek(ofd, off, L_SET) == -1)	{		(void) fprintf(stderr, "%s: lseek fails: ", progname);		perror("");		exit(1);	}	if (write(ofd, (char *)&var, sizeof(int)) != sizeof(int))	{		(void) fprintf(stderr, "%s: write fails: ", progname);		perror("");		exit(1);	}	return;}/* * readvar - read a variable from the file */static voidreadvar(	int ifd,	off_t off,	int *var	){	int i;		if (lseek(ifd, off, L_SET) == -1)	{		(void) fprintf(stderr, "%s: lseek fails: ", progname);		perror("");		exit(1);	}	i = read(ifd, (char *)var, sizeof(int));	if (i < 0)	{		(void) fprintf(stderr, "%s: read fails: ", progname);		perror("");		exit(1);	}	if (i != sizeof(int))	{		(void) fprintf(stderr, "%s: read expected %d, got %d\n",			       progname, (int)sizeof(int), i);		exit(1);	}	return;}#endif /* not Linux */

⌨️ 快捷键说明

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