#include #include #include #include #define NFILES 99800 #define TRIALS 10000L int files[NFILES]; #define ssec ru_stime.tv_sec #define usec ru_utime.tv_sec #define susec ru_stime.tv_usec #define uusec ru_utime.tv_usec void massage (int fd) { u_long i; struct rusage t1, t2; getrusage(RUSAGE_SELF, &t1); for (i = 0; i < TRIALS; i++) { close (files[0]); close (files[fd]); files[0] = open("/etc/passwd", O_RDONLY, 0); if (files[0] != 3) { perror("massage: open(0)"); exit (0); } files[fd] = open("/etc/passwd", O_RDONLY, 0); if (files[fd] != fd + 3) { perror("massage: open"); exit (0); } } getrusage(RUSAGE_SELF, &t2); printf ("%d %lf\n", fd, (double)(t2.ssec + t2.usec - t1.ssec - t1.usec) + (double)(t2.susec + t2.uusec - t1.susec - t1.uusec)/1000000); } int main (void) { int i; for (i = 0; i < NFILES; i++) { files[i] = open("/etc/passwd", O_RDONLY, 0); if (files[i] == -1) { perror("open"); exit (0); } } for (i = 1; i < NFILES; i += 200) massage (i); return 1; }