xref: /csrg-svn/usr.bin/gprof/hertz.c (revision 10247)
1*10247Speter #ifndef lint
2*10247Speter     static	char *sccsid = "@(#)hertz.c	1.1 (Berkeley) 01/11/83";
3*10247Speter #endif lint
4*10247Speter 
5*10247Speter     /*
6*10247Speter      *	discover the tick frequency of the machine
7*10247Speter      */
8*10247Speter #include <nlist.h>
9*10247Speter #include <stdio.h>
10*10247Speter 
11*10247Speter struct nlist	nl[] =	{{"_hz"},	/* clock ticks per second */
12*10247Speter 			 {0}};
13*10247Speter 
14*10247Speter hertz()
15*10247Speter {
16*10247Speter     int		kmem;			/* file descriptor for /dev/kmem */
17*10247Speter     long	lseek();
18*10247Speter     long	seeked;			/* return value from lseek() */
19*10247Speter     long	hz;			/* buffer for reading from system */
20*10247Speter     int		red;			/* return value from read() */
21*10247Speter     int		closed;			/* return value from close() */
22*10247Speter 
23*10247Speter #   define	VMUNIX	"/vmunix"	/* location of the system namelist */
24*10247Speter     nlist(VMUNIX, nl);
25*10247Speter     if (nl[0].n_type == 0) {
26*10247Speter 	fprintf(stderr, "no %s namelist entry for _hz\n", VMUNIX);
27*10247Speter 	return 0;
28*10247Speter     }
29*10247Speter #   define	KMEM	"/dev/kmem"	/* location of the system data space */
30*10247Speter     kmem = open(KMEM, 0);
31*10247Speter     if (kmem == -1) {
32*10247Speter 	perror("hertz()");
33*10247Speter 	fprintf(stderr, "open(\"%s\", 0)", KMEM);
34*10247Speter 	return 0;
35*10247Speter     }
36*10247Speter     seeked = lseek(kmem, nl[0].n_value, 0);
37*10247Speter     if (seeked == -1) {
38*10247Speter 	fprintf(stderr, "can't lseek(kmem, 0x%x, 0)\n", nl[0].n_value);
39*10247Speter 	return 0;
40*10247Speter     }
41*10247Speter     red = read(kmem, &hz, sizeof hz);
42*10247Speter     if (red != sizeof hz) {
43*10247Speter 	fprintf(stderr, "read(kmem, 0x%x, %d) returned %d\n",
44*10247Speter 		&hz, sizeof hz, red);
45*10247Speter 	return 0;
46*10247Speter     }
47*10247Speter     closed = close(kmem);
48*10247Speter     if (closed != 0) {
49*10247Speter 	perror("hertz()");
50*10247Speter 	fprintf(stderr, "close(\"%s\")", KMEM);
51*10247Speter 	return 0;
52*10247Speter     }
53*10247Speter     return hz;
54*10247Speter }
55