This commit is contained in:
Jari Aalto 2016-10-20 13:46:55 +00:00 committed by GitHub
commit de979fb12f
2 changed files with 92 additions and 0 deletions

64
arch/GNU/getload.c Normal file
View File

@ -0,0 +1,64 @@
#define LOADFILE "/proc/loadavg"
/* What the contents of the proc file look like, as an example:
* 0.00 0.00 0.00 1/59 10941
*/
#include "ttyload.h"
#include <stdio.h> /* for perror */
#include <stdlib.h> /* for exit() */
#include <unistd.h> /* for sleep() */
void getload(load_list *loadavgs)
{
float theload[3];
FILE *loadfile;
int ret;
/* just for sanity: */
if(!loadavgs)
{
fprintf(stderr, "getload called without loadavgs pointer.\n");
exit(2);
}
if(!(loadfile = fopen(LOADFILE, "r")))
{
perror("Open of " LOADFILE " failed");
exit(1);
}
ret = fscanf(loadfile, "%f %f %f ", &(theload[0]), &(theload[1]), &(theload[2]));
if(fclose(loadfile) != 0)
{
perror("Close of " LOADFILE " failed?!");
exit(1);
}
/* so the caller _can_ (maybe not _will_) know how we did */
loadavgs->numloads = ret;
loadavgs->one_minute = theload[0] * 1024;
loadavgs->five_minute = theload[1] * 1024;
loadavgs->fifteen_minute = theload[2] * 1024;
/* a little warning thing... should probably be re-written
* for the Linux/fscanf stuff, this is a hold-over from the
* solaris stuff. */
switch(ret)
{
case 2:
fprintf(stderr, "15 minute Load average is unreliable.\n");
sleep(5);
break;
case 1:
fprintf(stderr, "5 and 15 minute load averages are unreliable.\n");
sleep(5);
break;
case 0:
fprintf(stderr, "Sorry, couldn't get any load "
"averages. This is, therefore, pointless.\n");
exit(1);
}
}

28
arch/GNU/terminfo.c Normal file
View File

@ -0,0 +1,28 @@
/*
* arch/Linux/terminfo.c -- routines for getting terminal
* information on Linux machines.
*
* Copyright 2001, David Lindes. All rights reserved.
*/
#include <sys/ioctl.h> /* for ioctl() */
/* globals */
extern int rows;
extern int cols;
void gettermsize()
{
struct winsize info;
/* try to get data via IOCTL: */
if (ioctl(1 /* stdout */, TIOCGWINSZ, &info) != -1)
{
/* if successful, and the data seems sane, set the
* program's globals: */
if(info.ws_col > 0)
cols = info.ws_col;
if(info.ws_row > 0)
rows = info.ws_row;
}
}