>>17をちょっと改造してみた

#define PROC_LOADAVG "/proc/loadavg"
#define LOADAVG_MAX 100
/* return the integer part of the loadavg. for the past 1 min.
*/
int
get_loadavg(void)
{
#ifdef __linux__
 int fd;
 char *s;
 /* open /proc/loadavg. */
 fd = open(PROC_LOADAVG, O_RDONLY);
 /* take it seriously if the file cannot be read. */
 if (fd == -1)
  return LOADAVG_MAX;
 s = mmap(NULL, 40, PROT_READ, MAP_SHARED, fd, 0);
 close(fd);
 /* the form should be "x.xx x.xx x.xx x/x xxxx". */
 return s != MAP_FAILED ? atoi(s) : LOADAVG_MAX;
#else
 double avg;
 return getloadavg(&avg, 1) == 1 ? avg : LOADAVG_MAX;
#endif
}

あと>>19の dat_read() では dat落ちしたのはもうカキコされることはない
はずだから MAP_SHARED で mmap() しちゃっても問題ないような気はする......