1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
/* $Cambridge: exim/exim-src/OS/os.c-Linux-libc5,v 1.1 2004/10/06 15:07:39 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
/* Copyright (c) University of Cambridge 2001 */
/* See the file NOTICE for conditions of use and distribution. */
/* Linux-specific code. This is concatenated onto the generic src/os.c file.
Linux has an apparently unique way of getting the load average, so we provide a
unique function here, and define OS_LOAD_AVERAGE to stop src/os.c trying to
provide the function. The macro may be set initially anyway, when compiling os.
for utilities that don't want this function. */
#ifndef OS_LOAD_AVERAGE
#define OS_LOAD_AVERAGE
int
os_getloadavg(void)
{
char buffer[40];
double avg;
int count;
int fd = open ("/proc/loadavg", O_RDONLY);
if (fd == -1) return -1;
count = read (fd, buffer, sizeof(buffer));
(void)close (fd);
if (count <= 0) return -1;
count = sscanf (buffer, "%lf", &avg);
if (count < 1) return -1;
return (int)(avg * 1000.0);
}
#endif /* OS_LOAD_AVERAGE */
/* End of os.c-Linux */
|