diff --git a/Makefile.am b/Makefile.am index 086d7c51..2efec442 100644 --- a/Makefile.am +++ b/Makefile.am @@ -264,6 +264,8 @@ proc_test_sysinfo_SOURCES = proc/test_sysinfo.c proc_test_sysinfo_LDADD = proc/libprocps.la proc_test_namespace_SOURCES = proc/test_namespace.c proc_test_namespace_LDADD = proc/libprocps.la +proc_test_uptime_SOURCES = include/tests.h proc/test_uptime.c +proc_test_uptime_LDADD = proc/libprocps.la proc_test_version_SOURCES = include/tests.h proc/test_version.c proc_test_version_LDADD = proc/libprocps.la lib_test_strtod_nol_SOURCES = lib/test_strtod_nol.c lib/strutils.c @@ -277,6 +279,7 @@ BUILT_SOURCES = $(top_srcdir)/.version TESTS = proc/test_sysinfo \ proc/test_namespace \ + proc/test_uptime \ proc/test_version \ lib/test_strtod_nol diff --git a/doc/procps_uptime.3 b/doc/procps_uptime.3 new file mode 100644 index 00000000..912aa3c7 --- /dev/null +++ b/doc/procps_uptime.3 @@ -0,0 +1,58 @@ +.\" (C) Copyright 2016 Craig Small +.\" +.\" %%%LICENSE_START(LGPL_2.1+) +.\" This manual is free software; you can redistribute it and/or +.\" modify it under the terms of the GNU Lesser General Public +.\" License as published by the Free Software Foundation; either +.\" version 2.1 of the License, or (at your option) any later version. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" Lesser General Public License for more details. +.\" +.\" You should have received a copy of the GNU Lesser General Public +.\" License along with this library; if not, write to the Free Software +.\" Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +.\" %%%LICENSE_END +.\" +.TH PROCPS_UPTIME 3 2016-04-16 "libproc-2" +.\" Please adjust this date whenever revising the manpage. +.\" +.SH NAME +procps_uptime \- +provide the uptime and idle time in seconds +.SH SYNOPSIS +.B #include +.sp +.BI "int procps_uptime(double * " uptime_secs ", double * " idle_secs ");" +.sp +Link with \fI\-lprocps\fP. +.SH DESCRIPTION +The function +.BR procps_uptime () +fills the location of the two double points with the current sytem uptime +and idle time. +.SH RETURN VALUE +.BR procps_uptime () +returns a positive integer which is the uptime on success. On failure, it +returns a negative integer to one of the values defined below. +.TP +.B -ERANGE +Unable to parse the uptime file. +.PP +.BR procps_uptime () +may also return any (negated) value that \fBfopen\fR() may set errno to. + +.SH FILES +.TP +.I /proc/uptime +The raw values for uptime and idle time. + +.SH VERSIONS +.B procps_uptime() +first appeared in libproc-2 version 0.0. + +.SH SEE ALSO +.BR fopen (3), +.BR proc (5). diff --git a/doc/procps_uptime_sprint.3 b/doc/procps_uptime_sprint.3 new file mode 100644 index 00000000..6aba6cef --- /dev/null +++ b/doc/procps_uptime_sprint.3 @@ -0,0 +1,61 @@ +.\" (C) Copyright 2016 Craig Small +.\" +.\" %%%LICENSE_START(LGPL_2.1+) +.\" This manual is free software; you can redistribute it and/or +.\" modify it under the terms of the GNU Lesser General Public +.\" License as published by the Free Software Foundation; either +.\" version 2.1 of the License, or (at your option) any later version. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +.\" Lesser General Public License for more details. +.\" +.\" You should have received a copy of the GNU Lesser General Public +.\" License along with this library; if not, write to the Free Software +.\" Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +.\" %%%LICENSE_END +.\" +.TH PROCPS_uptime_sprint_SPRINT 3 2016-04-16 "libproc-2" +.\" Please adjust this date whenever revising the manpage. +.\" +.SH NAME +procps_uptime_sprint \- +provide the uptime and idle time in seconds +.SH SYNOPSIS +.B #include +.sp +.B char procps_uptime_sprint(void); +.br +.B char procps_uptime_sprint_short(void); +.sp +Link with \fI\-lprocps\fP. +.SH DESCRIPTION +The functions +.BR procps_uptime_sprint () +and +.BR procps_uptime_sprint_short () +return a string from a statically allocated buffer which displays uptime +and other system statistics. This format is similar to +.BR w (1) + +.SH RETURN VALUE +Both functions return a formatted string on success and NULL on failure. +.PP +.B procps_uptime_sprint +returns a string displaying the uptime, number of users and load average. +.PP +.B procps_uptime_sprint_short +returns a string displaying the uptime only. + +.SH VERSIONS +.B procps_uptime_sprint() +and +.B procps_uptime_sprint_short() +first appeared in libproc-2 version 0.0. + +.SH SEE ALSO +.BR fopen (3), +.BR procps_loadavg (3), +.BR procps_uptime (3), +.BR proc (5). diff --git a/doc/procps_uptime_sprint_short.3 b/doc/procps_uptime_sprint_short.3 new file mode 100644 index 00000000..3c7bb14d --- /dev/null +++ b/doc/procps_uptime_sprint_short.3 @@ -0,0 +1 @@ +.so man3/procps_uptime_sprint.1 diff --git a/proc/.gitignore b/proc/.gitignore index 0b68ed8a..7f596aa5 100644 --- a/proc/.gitignore +++ b/proc/.gitignore @@ -1,3 +1,4 @@ test_namespace -test_version test_sysinfo +test_uptime +test_version diff --git a/proc/test_uptime.c b/proc/test_uptime.c new file mode 100644 index 00000000..92fc5fdb --- /dev/null +++ b/proc/test_uptime.c @@ -0,0 +1,103 @@ +/* + * libprocps - Library to read proc filesystem + * Tests for version library calls + * + * Copyright 2016 Craig Small + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include +#include + +#include +#include "tests.h" + +int check_uptime(void *data) +{ + double up=0, idle=0; + int rc; + rc = procps_uptime(&up, &idle); + return (rc > 0 && up > 0 && idle > 0); +} + +int check_uptime_nullup(void *data) +{ + double idle=0; + int rc; + rc = procps_uptime(NULL, &idle); + return (rc > 0 && idle > 0); +} + +int check_uptime_nullidle(void *data) +{ + double up=0; + int rc; + rc = procps_uptime(&up, NULL); + return (rc > 0 && up > 0); +} + +int check_uptime_nullall(void *data) +{ + int rc; + rc = procps_uptime(NULL, NULL); + return (rc > 0); +} + +int check_uptime_sprint(void *data) +{ + char *str; + + str = procps_uptime_sprint(); + + return (str != NULL && str[0] != '\0'); +} + +int check_uptime_sprint_short(void *data) +{ + char *str; + + str = procps_uptime_sprint_short(); + + return (str != NULL && str[0] != '\0'); +} + +struct test_func tests[] = { + { check_uptime, "procps_uptime()"}, + { check_uptime_nullup, "procps_uptime() (up=NULL)"}, + { check_uptime_nullidle, "procps_uptime() (idle=NULL)"}, + { check_uptime_nullall, "procps_uptime() (up,idle=NULL)"}, + { check_uptime_sprint, "procps_uptime_sprint()"}, + { check_uptime_sprint_short, "procps_uptime_sprint_short()"}, + { NULL, NULL} +}; + +int main(int argc, char *argv[]) +{ + int i; + struct test_func *current; + + for(i=0; tests[i].func != NULL; i++) { + current = &tests[i]; + if (!current->func(NULL)) { + fprintf(stderr, "FAIL: %s\n", current->name); + return EXIT_FAILURE; + } else { + fprintf(stderr, "PASS: %s\n", current->name); + } + } + return EXIT_SUCCESS; +} + +