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