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