library: document and tests for uptime functions

man pages for the three procps_uptime* functions and simple
test scripts for same functions.
This commit is contained in:
Craig Small 2016-04-16 22:02:10 +10:00
parent 929ab3ce84
commit 8e20fa7786
6 changed files with 228 additions and 1 deletions

View File

@ -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

58
doc/procps_uptime.3 Normal file
View File

@ -0,0 +1,58 @@
.\" (C) Copyright 2016 Craig Small <csmall@enc.com.au>
.\"
.\" %%%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 <proc/procps.h>
.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).

View File

@ -0,0 +1,61 @@
.\" (C) Copyright 2016 Craig Small <csmall@enc.com.au>
.\"
.\" %%%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 <proc/procps.h>
.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).

View File

@ -0,0 +1 @@
.so man3/procps_uptime_sprint.1

3
proc/.gitignore vendored
View File

@ -1,3 +1,4 @@
test_namespace
test_version
test_sysinfo
test_uptime
test_version

103
proc/test_uptime.c Normal file
View File

@ -0,0 +1,103 @@
/*
* libprocps - Library to read proc filesystem
* Tests for version library calls
*
* Copyright 2016 Craig Small <csmall@enc.com.au>
*
* 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 <stdlib.h>
#include <stdio.h>
#include <proc/procps.h>
#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;
}