Use indentation to increase readability
Granted, this style is definitely not common, but for the short utility-functions of this program it's just the right choice. This provides great flexibility, such that in the long run, it will be possible to also share code between the OS-implementations. This also keeps the state-keeping at a minimum and makes it clearer which functions are implemented on which OS without having to jiggle around with too many files in the process.master
parent
42edfea89a
commit
9750a3d731
@ -1,15 +1,18 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "../util.h"
|
#include "../util.h"
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
entropy(void)
|
entropy(void)
|
||||||
{
|
{
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
return (pscanf("/proc/sys/kernel/random/entropy_avail", "%d", &num) == 1) ?
|
return (pscanf("/proc/sys/kernel/random/entropy_avail",
|
||||||
bprintf("%d", num) : NULL;
|
"%d", &num) == 1) ?
|
||||||
}
|
bprintf("%d", num) : NULL;
|
||||||
|
}
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
/* unimplemented */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,129 +1,133 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#if defined (__OpenBSD__)
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../util.h"
|
#include "../util.h"
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
const char *
|
const char *
|
||||||
ram_free(void)
|
ram_free(void)
|
||||||
{
|
{
|
||||||
long free;
|
long free;
|
||||||
|
|
||||||
return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ?
|
return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ?
|
||||||
bprintf("%f", (float)free / 1024 / 1024) : NULL;
|
bprintf("%f", (float)free / 1024 / 1024) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
ram_perc(void)
|
ram_perc(void)
|
||||||
{
|
{
|
||||||
long total, free, buffers, cached;
|
long total, free, buffers, cached;
|
||||||
|
|
||||||
return (pscanf("/proc/meminfo",
|
return (pscanf("/proc/meminfo",
|
||||||
"MemTotal: %ld kB\n"
|
"MemTotal: %ld kB\n"
|
||||||
"MemFree: %ld kB\n"
|
"MemFree: %ld kB\n"
|
||||||
"MemAvailable: %ld kB\nBuffers: %ld kB\n"
|
"MemAvailable: %ld kB\nBuffers: %ld kB\n"
|
||||||
"Cached: %ld kB\n",
|
"Cached: %ld kB\n",
|
||||||
&total, &free, &buffers, &buffers, &cached) == 5) ?
|
&total, &free, &buffers, &buffers, &cached) == 5) ?
|
||||||
bprintf("%d", 100 * ((total - free) - (buffers + cached)) / total) :
|
bprintf("%d", 100 * ((total - free) - (buffers + cached)) /
|
||||||
NULL;
|
total) :
|
||||||
}
|
NULL;
|
||||||
|
}
|
||||||
const char *
|
|
||||||
ram_total(void)
|
const char *
|
||||||
{
|
ram_total(void)
|
||||||
long total;
|
{
|
||||||
|
long total;
|
||||||
return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ?
|
|
||||||
bprintf("%f", (float)total / 1024 / 1024) : NULL;
|
return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ?
|
||||||
}
|
bprintf("%f", (float)total / 1024 / 1024) : NULL;
|
||||||
|
|
||||||
const char *
|
|
||||||
ram_used(void)
|
|
||||||
{
|
|
||||||
long total, free, buffers, cached;
|
|
||||||
|
|
||||||
return (pscanf("/proc/meminfo",
|
|
||||||
"MemTotal: %ld kB\n"
|
|
||||||
"MemFree: %ld kB\n"
|
|
||||||
"MemAvailable: %ld kB\nBuffers: %ld kB\n"
|
|
||||||
"Cached: %ld kB\n",
|
|
||||||
&total, &free, &buffers, &buffers, &cached) == 5) ?
|
|
||||||
bprintf("%f", (float)(total - free - buffers - cached) / 1024 / 1024) :
|
|
||||||
NULL;
|
|
||||||
}
|
|
||||||
#elif defined(__OpenBSD__)
|
|
||||||
inline int
|
|
||||||
load_uvmexp(struct uvmexp *uvmexp)
|
|
||||||
{
|
|
||||||
int uvmexp_mib[] = {CTL_VM, VM_UVMEXP};
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
size = sizeof(*uvmexp);
|
|
||||||
|
|
||||||
return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
ram_free(void)
|
|
||||||
{
|
|
||||||
struct uvmexp uvmexp;
|
|
||||||
float free;
|
|
||||||
int free_pages;
|
|
||||||
|
|
||||||
if (load_uvmexp(&uvmexp)) {
|
|
||||||
free_pages = uvmexp.npages - uvmexp.active;
|
|
||||||
free = (double) (free_pages * uvmexp.pagesize) / 1024 / 1024 / 1024;
|
|
||||||
return bprintf("%f", free);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
const char *
|
||||||
}
|
ram_used(void)
|
||||||
|
{
|
||||||
|
long total, free, buffers, cached;
|
||||||
|
|
||||||
|
return (pscanf("/proc/meminfo",
|
||||||
|
"MemTotal: %ld kB\n"
|
||||||
|
"MemFree: %ld kB\n"
|
||||||
|
"MemAvailable: %ld kB\nBuffers: %ld kB\n"
|
||||||
|
"Cached: %ld kB\n",
|
||||||
|
&total, &free, &buffers, &buffers, &cached) == 5) ?
|
||||||
|
bprintf("%f", (float)(total - free - buffers - cached) /
|
||||||
|
1024 / 1024) :
|
||||||
|
NULL;
|
||||||
|
}
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
inline int
|
||||||
|
load_uvmexp(struct uvmexp *uvmexp)
|
||||||
|
{
|
||||||
|
int uvmexp_mib[] = {CTL_VM, VM_UVMEXP};
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
size = sizeof(*uvmexp);
|
||||||
|
|
||||||
const char *
|
return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0;
|
||||||
ram_perc(void)
|
}
|
||||||
{
|
|
||||||
struct uvmexp uvmexp;
|
|
||||||
int percent;
|
|
||||||
|
|
||||||
if (load_uvmexp(&uvmexp)) {
|
const char *
|
||||||
percent = uvmexp.active * 100 / uvmexp.npages;
|
ram_free(void)
|
||||||
return bprintf("%d", percent);
|
{
|
||||||
|
struct uvmexp uvmexp;
|
||||||
|
float free;
|
||||||
|
int free_pages;
|
||||||
|
|
||||||
|
if (load_uvmexp(&uvmexp)) {
|
||||||
|
free_pages = uvmexp.npages - uvmexp.active;
|
||||||
|
free = (double) (free_pages * uvmexp.pagesize) / 1024 /
|
||||||
|
1024 / 1024;
|
||||||
|
return bprintf("%f", free);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
const char *
|
||||||
}
|
ram_perc(void)
|
||||||
|
{
|
||||||
|
struct uvmexp uvmexp;
|
||||||
|
int percent;
|
||||||
|
|
||||||
const char *
|
if (load_uvmexp(&uvmexp)) {
|
||||||
ram_total(void)
|
percent = uvmexp.active * 100 / uvmexp.npages;
|
||||||
{
|
return bprintf("%d", percent);
|
||||||
struct uvmexp uvmexp;
|
}
|
||||||
float total;
|
|
||||||
|
|
||||||
if (load_uvmexp(&uvmexp)) {
|
return NULL;
|
||||||
total = (double) (uvmexp.npages * uvmexp.pagesize) / 1024 / 1024 / 1024;
|
|
||||||
return bprintf("%f", total);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
const char *
|
||||||
}
|
ram_total(void)
|
||||||
|
{
|
||||||
|
struct uvmexp uvmexp;
|
||||||
|
float total;
|
||||||
|
|
||||||
const char *
|
if (load_uvmexp(&uvmexp)) {
|
||||||
ram_used(void)
|
total = (double) (uvmexp.npages * uvmexp.pagesize) /
|
||||||
{
|
1024 / 1024 / 1024;
|
||||||
struct uvmexp uvmexp;
|
return bprintf("%f", total);
|
||||||
float used;
|
}
|
||||||
|
|
||||||
if (load_uvmexp(&uvmexp)) {
|
return NULL;
|
||||||
used = (double) (uvmexp.active * uvmexp.pagesize) / 1024 / 1024 / 1024;
|
|
||||||
return bprintf("%f", used);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
const char *
|
||||||
}
|
ram_used(void)
|
||||||
|
{
|
||||||
|
struct uvmexp uvmexp;
|
||||||
|
float used;
|
||||||
|
|
||||||
|
if (load_uvmexp(&uvmexp)) {
|
||||||
|
used = (double) (uvmexp.active * uvmexp.pagesize) /
|
||||||
|
1024 / 1024 / 1024;
|
||||||
|
return bprintf("%f", used);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,138 +1,152 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "../util.h"
|
#include "../util.h"
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
swap_free(void)
|
swap_free(void)
|
||||||
{
|
{
|
||||||
long total, free;
|
long total, free;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
char *match;
|
char *match;
|
||||||
|
|
||||||
fp = fopen("/proc/meminfo", "r");
|
fp = fopen("/proc/meminfo", "r");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno));
|
fprintf(stderr, "fopen '/proc/meminfo': %s\n",
|
||||||
return NULL;
|
strerror(errno));
|
||||||
}
|
return NULL;
|
||||||
|
}
|
||||||
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
|
|
||||||
fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno));
|
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
|
||||||
|
fp)) == 0) {
|
||||||
|
fprintf(stderr, "fread '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
fclose(fp);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return NULL;
|
|
||||||
}
|
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
||||||
fclose(fp);
|
return NULL;
|
||||||
|
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
||||||
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
|
||||||
return NULL;
|
if ((match = strstr(buf, "SwapFree")) == NULL)
|
||||||
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
return NULL;
|
||||||
|
sscanf(match, "SwapFree: %ld kB\n", &free);
|
||||||
if ((match = strstr(buf, "SwapFree")) == NULL)
|
|
||||||
return NULL;
|
return bprintf("%f", (float)free / 1024 / 1024);
|
||||||
sscanf(match, "SwapFree: %ld kB\n", &free);
|
|
||||||
|
|
||||||
return bprintf("%f", (float)free / 1024 / 1024);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
swap_perc(void)
|
|
||||||
{
|
|
||||||
long total, free, cached;
|
|
||||||
FILE *fp;
|
|
||||||
size_t bytes_read;
|
|
||||||
char *match;
|
|
||||||
|
|
||||||
fp = fopen("/proc/meminfo", "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
|
const char *
|
||||||
fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno));
|
swap_perc(void)
|
||||||
|
{
|
||||||
|
long total, free, cached;
|
||||||
|
FILE *fp;
|
||||||
|
size_t bytes_read;
|
||||||
|
char *match;
|
||||||
|
|
||||||
|
fp = fopen("/proc/meminfo", "r");
|
||||||
|
if (fp == NULL) {
|
||||||
|
fprintf(stderr, "fopen '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
|
||||||
|
fp)) == 0) {
|
||||||
|
fprintf(stderr, "fread '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
fclose(fp);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return NULL;
|
|
||||||
}
|
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
||||||
fclose(fp);
|
return NULL;
|
||||||
|
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
||||||
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
|
||||||
return NULL;
|
if ((match = strstr(buf, "SwapCached")) == NULL)
|
||||||
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
return NULL;
|
||||||
|
sscanf(match, "SwapCached: %ld kB\n", &cached);
|
||||||
if ((match = strstr(buf, "SwapCached")) == NULL)
|
|
||||||
return NULL;
|
if ((match = strstr(buf, "SwapFree")) == NULL)
|
||||||
sscanf(match, "SwapCached: %ld kB\n", &cached);
|
return NULL;
|
||||||
|
sscanf(match, "SwapFree: %ld kB\n", &free);
|
||||||
if ((match = strstr(buf, "SwapFree")) == NULL)
|
|
||||||
return NULL;
|
return bprintf("%d", 100 * (total - free - cached) / total);
|
||||||
sscanf(match, "SwapFree: %ld kB\n", &free);
|
|
||||||
|
|
||||||
return bprintf("%d", 100 * (total - free - cached) / total);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
swap_total(void)
|
|
||||||
{
|
|
||||||
long total;
|
|
||||||
FILE *fp;
|
|
||||||
size_t bytes_read;
|
|
||||||
char *match;
|
|
||||||
|
|
||||||
fp = fopen("/proc/meminfo", "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
|
|
||||||
fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno));
|
const char *
|
||||||
|
swap_total(void)
|
||||||
|
{
|
||||||
|
long total;
|
||||||
|
FILE *fp;
|
||||||
|
size_t bytes_read;
|
||||||
|
char *match;
|
||||||
|
|
||||||
|
fp = fopen("/proc/meminfo", "r");
|
||||||
|
if (fp == NULL) {
|
||||||
|
fprintf(stderr, "fopen '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
|
||||||
|
fp)) == 0) {
|
||||||
|
fprintf(stderr, "fread '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
fclose(fp);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return NULL;
|
|
||||||
}
|
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
||||||
fclose(fp);
|
return NULL;
|
||||||
|
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
||||||
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
|
||||||
return NULL;
|
return bprintf("%f", (float)total / 1024 / 1024);
|
||||||
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
|
||||||
|
|
||||||
return bprintf("%f", (float)total / 1024 / 1024);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
swap_used(void)
|
|
||||||
{
|
|
||||||
long total, free, cached;
|
|
||||||
FILE *fp;
|
|
||||||
size_t bytes_read;
|
|
||||||
char *match;
|
|
||||||
|
|
||||||
fp = fopen("/proc/meminfo", "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) {
|
|
||||||
fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno));
|
const char *
|
||||||
|
swap_used(void)
|
||||||
|
{
|
||||||
|
long total, free, cached;
|
||||||
|
FILE *fp;
|
||||||
|
size_t bytes_read;
|
||||||
|
char *match;
|
||||||
|
|
||||||
|
fp = fopen("/proc/meminfo", "r");
|
||||||
|
if (fp == NULL) {
|
||||||
|
fprintf(stderr, "fopen '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
|
||||||
|
fp)) == 0) {
|
||||||
|
fprintf(stderr, "fread '/proc/meminfo': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
fclose(fp);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
if ((match = strstr(buf, "SwapTotal")) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
sscanf(match, "SwapTotal: %ld kB\n", &total);
|
||||||
|
|
||||||
if ((match = strstr(buf, "SwapCached")) == NULL)
|
if ((match = strstr(buf, "SwapCached")) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
sscanf(match, "SwapCached: %ld kB\n", &cached);
|
sscanf(match, "SwapCached: %ld kB\n", &cached);
|
||||||
|
|
||||||
if ((match = strstr(buf, "SwapFree")) == NULL)
|
if ((match = strstr(buf, "SwapFree")) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
sscanf(match, "SwapFree: %ld kB\n", &free);
|
sscanf(match, "SwapFree: %ld kB\n", &free);
|
||||||
|
|
||||||
return bprintf("%f", (float)(total - free - cached) / 1024 / 1024);
|
return bprintf("%f", (float)(total - free - cached) / 1024 / 1024);
|
||||||
}
|
}
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
/* unimplemented */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,45 +1,47 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#include <errno.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#if defined(__OpenBSD__)
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/sensors.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../util.h"
|
#include "../util.h"
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
const char *
|
const char *
|
||||||
temp(const char *file)
|
temp(const char *file)
|
||||||
{
|
{
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
return (pscanf(file, "%d", &temp) == 1) ?
|
return (pscanf(file, "%d", &temp) == 1) ?
|
||||||
bprintf("%d", temp / 1000) : NULL;
|
bprintf("%d", temp / 1000) : NULL;
|
||||||
}
|
|
||||||
#elif defined(__OpenBSD__)
|
|
||||||
const char *
|
|
||||||
temp(const char *null)
|
|
||||||
{
|
|
||||||
int mib[5];
|
|
||||||
size_t size;
|
|
||||||
struct sensor temp;
|
|
||||||
|
|
||||||
mib[0] = CTL_HW;
|
|
||||||
mib[1] = HW_SENSORS;
|
|
||||||
mib[2] = 0; /* cpu0 */
|
|
||||||
mib[3] = SENSOR_TEMP;
|
|
||||||
mib[4] = 0; /* temp0 */
|
|
||||||
|
|
||||||
size = sizeof(temp);
|
|
||||||
|
|
||||||
if (sysctl(mib, 5, &temp, &size, NULL, 0) == -1) {
|
|
||||||
fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n", strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/sensors.h>
|
||||||
|
|
||||||
|
const char *
|
||||||
|
temp(const char *null)
|
||||||
|
{
|
||||||
|
int mib[5];
|
||||||
|
size_t size;
|
||||||
|
struct sensor temp;
|
||||||
|
|
||||||
return bprintf("%d", (temp.value - 273150000) / 1000000); /* kelvin to celsius */
|
mib[0] = CTL_HW;
|
||||||
}
|
mib[1] = HW_SENSORS;
|
||||||
|
mib[2] = 0; /* cpu0 */
|
||||||
|
mib[3] = SENSOR_TEMP;
|
||||||
|
mib[4] = 0; /* temp0 */
|
||||||
|
|
||||||
|
size = sizeof(temp);
|
||||||
|
|
||||||
|
if (sysctl(mib, 5, &temp, &size, NULL, 0) == -1) {
|
||||||
|
fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* kelvin to celsius */
|
||||||
|
return bprintf("%d", (temp.value - 273150000) / 1000000);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,92 +1,100 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <ifaddrs.h>
|
#include <ifaddrs.h>
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "../util.h"
|
#include "../util.h"
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
wifi_perc(const char *iface)
|
wifi_perc(const char *iface)
|
||||||
{
|
{
|
||||||
int i, cur;
|
int i, cur;
|
||||||
float perc;
|
float perc;
|
||||||
int total = 70; /* the max of /proc/net/wireless */
|
int total = 70; /* the max of /proc/net/wireless */
|
||||||
char *p, *datastart;
|
char *p, *datastart;
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
char status[5];
|
char status[5];
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface, "/operstate");
|
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
|
||||||
fp = fopen(path, "r");
|
"/operstate");
|
||||||
if (fp == NULL) {
|
fp = fopen(path, "r");
|
||||||
fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno));
|
if (fp == NULL) {
|
||||||
return NULL;
|
fprintf(stderr, "fopen '%s': %s\n", path,
|
||||||
}
|
strerror(errno));
|
||||||
p = fgets(status, 5, fp);
|
return NULL;
|
||||||
fclose(fp);
|
}
|
||||||
if(!p || strcmp(status, "up\n") != 0) {
|
p = fgets(status, 5, fp);
|
||||||
return NULL;
|
fclose(fp);
|
||||||
}
|
if(!p || strcmp(status, "up\n") != 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
fp = fopen("/proc/net/wireless", "r");
|
fp = fopen("/proc/net/wireless", "r");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "fopen '/proc/net/wireless': %s\n", strerror(errno));
|
fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
|
||||||
return NULL;
|
strerror(errno));
|
||||||
}
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
if (!(p = fgets(buf, sizeof(buf) - 1, fp)))
|
if (!(p = fgets(buf, sizeof(buf) - 1, fp)))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
if (i < 2 || !p)
|
if (i < 2 || !p)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if ((datastart = strstr(buf, iface)) == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if ((datastart = strstr(buf, iface)) == NULL)
|
datastart = (datastart+(strlen(iface)+1));
|
||||||
return NULL;
|
sscanf(datastart + 1, " %*d %d %*d %*d\t\t %*d\t "
|
||||||
|
"%*d\t\t%*d\t\t %*d\t %*d\t\t %*d", &cur);
|
||||||
|
|
||||||
datastart = (datastart+(strlen(iface)+1));
|
perc = (float)cur / total * 100.0;
|
||||||
sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &cur);
|
|
||||||
|
|
||||||
perc = (float)cur / total * 100.0;
|
return bprintf("%.0f", perc);
|
||||||
|
}
|
||||||
|
|
||||||
return bprintf("%.0f", perc);
|
const char *
|
||||||
}
|
wifi_essid(const char *iface)
|
||||||
|
{
|
||||||
|
static char id[IW_ESSID_MAX_SIZE+1];
|
||||||
|
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
struct iwreq wreq;
|
||||||
|
|
||||||
const char *
|
memset(&wreq, 0, sizeof(struct iwreq));
|
||||||
wifi_essid(const char *iface)
|
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
|
||||||
{
|
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
|
||||||
static char id[IW_ESSID_MAX_SIZE+1];
|
|
||||||
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
struct iwreq wreq;
|
|
||||||
|
|
||||||
memset(&wreq, 0, sizeof(struct iwreq));
|
if (sockfd == -1) {
|
||||||
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
|
fprintf(stderr, "socket 'AF_INET': %s\n",
|
||||||
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
|
strerror(errno));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
wreq.u.essid.pointer = id;
|
||||||
|
if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
|
||||||
|
fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
close(sockfd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (sockfd == -1) {
|
|
||||||
fprintf(stderr, "socket 'AF_INET': %s\n", strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
wreq.u.essid.pointer = id;
|
|
||||||
if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
|
|
||||||
fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno));
|
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
close(sockfd);
|
if (strcmp(id, "") == 0)
|
||||||
|
return NULL;
|
||||||
if (strcmp(id, "") == 0)
|
else
|
||||||
return NULL;
|
return id;
|
||||||
else
|
}
|
||||||
return id;
|
#elif defined(__OpenBSD__)
|
||||||
}
|
/* unimplemented */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue