|
|
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.