From 9a90045965f23cc003200cdb65521eab60bb5953 Mon Sep 17 00:00:00 2001 From: li-long315 Date: Mon, 26 Jun 2023 15:38:33 +0800 Subject: [PATCH] Parsing command line parameters for file system statistics function --- observation/src/vfsstat/vfsstat.c | 71 +++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 observation/src/vfsstat/vfsstat.c diff --git a/observation/src/vfsstat/vfsstat.c b/observation/src/vfsstat/vfsstat.c new file mode 100644 index 00000000..ed1c988f --- /dev/null +++ b/observation/src/vfsstat/vfsstat.c @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "commons.h" +#include "vfsstat.h" +#include "vfsstat.skel.h" +#include "btf_helpers.h" +#include "trace_helpers.h" + +static volatile sig_atomic_t exiting; + +const char *argp_program_version = "vfsstat 0.1"; +const char *argp_program_bug_address = "Jackie Liu "; +const char argp_program_doc[] = +"\nvfsstat: Count some VFS calls\n" +"\n" +"EXAMPLES:\n" +" vfsstat # interval one second\n" +" vfsstat 5 3 # interval five seconds, three output lines\n"; + +static char args_doc[] = "[interval [count]]"; + +static const struct argp_option opts[] = { + { "verbose", 'v', NULL, 0, "Verbose debug output" }, + { NULL, 'h', NULL, OPTION_HIDDEN, "Show the full help" }, + {}, +}; + +static error_t parse_arg(int key, char *arg, struct argp_state *state) +{ + switch (key) { + case 'h': + argp_state_help(state, stderr, ARGP_HELP_STD_HELP); + break; + case 'v': + env.verbose = true; + break; + case ARGP_KEY_ARG: + switch (state->arg_num) { + case 0: + env.interval = argp_parse_long(key, arg, state); + break; + case 1: + env.count = argp_parse_long(key, arg, state); + break; + default: + argp_usage(state); + break; + } + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +int main(int argc, char *argv[]) +{ + LIBBPF_OPTS(bpf_object_open_opts, open_opts); + static const struct argp argp = { + .options = opts, + .parser = parse_arg, + .doc = argp_program_doc, + .args_doc = args_doc + }; + int err; + + err = argp_parse(&argp, argc, argv, 0, NULL, NULL); + if (err) + return err; + + return err != 0; +} -- Gitee