C Version

Create the file util1.c with the following content to increment the counter statistics in this example. See the libsstore(3LIB) and sstore_data_attach(3SSTORE) man pages for information about the libsstore C interfaces and types.

/*
 * Example program to provide statistics values using sstore_data_attach().
 */

#include <libsstore.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

#define NUM_STATS   3

/* libsstore handle */
sstore_handle_t hdl;

/* statistic identifiers */
char *ids[NUM_STATS] = {
    "//:class.app/util1//:stat.reads",
    "//:class.app/util1//:stat.writes",
    "//:class.app/util1//:stat.errors"
};

/* structure where values are stored */
struct mystats {
    uint64_t reads;
    uint64_t writes;
    uint64_t errors;
};

int main()
{
    int iterations = 500;
    struct mystats *stats;

    /* Allocate a libsstore handle. */
    if ((hdl = sstore_alloc()) == NULL) {
            (void) printf("Failed to allocate handle.");
            return (-1);
    }

    /*
     * These statistics already have metadata in a common location,
     * so sstore knows how to create them. sstore_data_attach() will
     * create a shared-memory region between sstore and this program.
     */
    if (sstore_data_attach(hdl, (const char **)&ids, NUM_STATS,
        (uint64_t **)&stats) != ESSTORE_OK) {
            (void) fprintf(stderr,
                "sstore_data_attach() failed because %s\n",
                sstore_err_description(hdl));
            return (-1);
    }

    /*
     * Update the values in the structure.
     * The new values will be stored when sstore reads them.
     */

    while (iterations-- > 0) {
        stats->reads += rand() % 6;
        stats->writes += rand() % 5;
        stats->errors += rand() % 2;
        sleep(1);
    }

    /*
     * Free the libsstore handle.
     * The statistics are marked as not being actively provided.
     */
    sstore_free(hdl);

    return (0);
}

Compile this sample application:

$ cc -lsstore -o util1 util1.c