diff options
author | Michael Stapelberg <michael+x200@stapelberg.de> | 2008-10-04 19:16:41 +0200 |
---|---|---|
committer | Michael Stapelberg <michael+x200@stapelberg.de> | 2008-10-04 19:16:41 +0200 |
commit | e68449ee1db529d0ef7b88fb0fba15263445b574 (patch) | |
tree | d4df67b81897bbeb0f63662110f120c1287f27fa | |
parent | 79dfdafb212e9933f32630a3548f05a4a2d786d1 (diff) |
Implement run_watches
-rw-r--r-- | config.h | 8 | ||||
-rw-r--r-- | wmiistatus.c | 36 | ||||
-rw-r--r-- | wmiistatus.h | 1 |
3 files changed, 35 insertions, 10 deletions
@@ -1,9 +1,5 @@ const char *wlan_interface = "wlan0"; const char *eth_interface = "eth0"; - const char *wmii_path = "/mnt/wmii/rbar/status"; - -// TODO: run-watches, z.B. -// "/var/run/dhcp*.pid" --> checkt ob's das file gibt, ob der prozess läuft und zeigt dann yes/no an -// "/var/run/vpnc*.pid" - +const char *run_watches[] = {"DHCP", "/var/run/dhclient*.pid", + "VPN", "/var/run/vpnc*.pid"}; diff --git a/wmiistatus.c b/wmiistatus.c index 269f681..f516849 100644 --- a/wmiistatus.c +++ b/wmiistatus.c @@ -46,8 +46,9 @@ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> -#include "wmiistatus.h" +#include <glob.h> +#include "wmiistatus.h" #include "config.h" static void write_to_statusbar(const char *message) { @@ -232,15 +233,43 @@ static char *get_eth_info() { return part; } +/* + * Checks if the PID in path is still valid by checking if /proc/<pid> exists + * + */ +bool process_runs(const char *path) { + char pidbuf[512], + procbuf[512]; + static glob_t globbuf; + struct stat statbuf; + + if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0) + die("glob() failed"); + const char *real_path = (globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path); + int fd = open(real_path, O_RDONLY); + globfree(&globbuf); + if (fd < 0) + return false; + read(fd, pidbuf, sizeof(pidbuf)); + close(fd); + sprintf(procbuf, "/proc/%s", pidbuf); + return (stat(procbuf, &statbuf) >= 0); +} int main(void) { char part[512], *end; + unsigned int i; while (1) { memset(output, '\0', sizeof(output)); first_push = true; + for (i = 0; i < sizeof(run_watches) / sizeof(char*); i += 2) { + sprintf(part, "%s: %s", run_watches[i], (process_runs(run_watches[i+1]) ? "yes" : "no")); + push_part(part, strlen(part)); + } + char *wireless_info = get_wireless_info(); push_part(wireless_info, strlen(wireless_info)); @@ -250,9 +279,10 @@ int main(void) { char *battery_info = get_battery_info(); push_part(battery_info, strlen(battery_info)); - /* Get load */ int load_avg = open("/proc/loadavg", O_RDONLY); + if (load_avg == -1) + die("Could not open /proc/loadavg"); read(load_avg, part, sizeof(part)); close(load_avg); end = skip_character(part, ' ', 3); @@ -264,8 +294,6 @@ int main(void) { strftime(part, sizeof(part), "%d.%m.%Y %H:%M:%S", current_tm); push_part(part, strlen(part)); - printf("output = %s\n", output); - int fd = open("/mnt/wmii/rbar/status", O_RDWR); write(fd, output, strlen(output)); close(fd); diff --git a/wmiistatus.h b/wmiistatus.h index de876ad..13ec2c7 100644 --- a/wmiistatus.h +++ b/wmiistatus.h @@ -13,3 +13,4 @@ static char *get_battery_info(void); static char *get_wireless_info(void); static char *get_ip_address(const char *interface); static char *get_eth_info(void); +bool process_runs(const char *path); |