14 void sighandler(int sig)
19 int main(int argc, char **argv)
23 time_t starttime, endtime;
27 int thisrec, numrecs, numuses, maxrec;
32 fprintf(stderr, "usage: speedrec recfile\n");
36 starttime = endtime = 0;
39 signal(SIGHUP, sighandler);
40 signal(SIGINT, sighandler);
41 signal(SIGTERM, sighandler);
44 ret = read(0, buf, sizeof(buf));
45 if((ret < 0) && (errno != EINTR))
47 perror("cannot read");
56 ret = write(1, buf, datalen);
57 if((ret < 0) && (errno != EINTR))
59 perror("cannot write");
62 memmove(buf, buf + ret, datalen -= ret);
65 if((starttime == 0) || (endtime == 0) || (endtime == starttime))
69 thisrec = (int)(numbytes / ((long long)(endtime - starttime)));
70 if((fd = open(argv[1], O_RDWR | O_CREAT, 0666)) < 0)
75 recfile = fdopen(fd, "r+");
79 if(fscanf(recfile, "%i\n", &numuses) < 1)
81 if(fscanf(recfile, "%i\n", &maxrec) < 1)
83 if(fscanf(recfile, "%i\n", &numrecs) < 1)
85 for(i = 0; i < numrecs; i++)
86 fscanf(recfile, "%i\n", &recs[i]);
89 for(i = 0; i < 4; i++)
90 recs[i] = recs[i + 1];
93 recs[numrecs++] = thisrec;
96 fprintf(recfile, "%i\n", numuses + 1);
97 fprintf(recfile, "%i\n", (thisrec > maxrec)?thisrec:maxrec);
98 fprintf(recfile, "%i\n", numrecs);
99 for(i = 0; i < numrecs; i++)
100 fprintf(recfile, "%i\n", recs[i]);