From ea770b8419686f9c8f71c20d275a832efc1b3f48 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Wed, 7 Jul 2021 10:10:48 +0200 Subject: Added uname --- src/uname.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/uname.c (limited to 'src/uname.c') diff --git a/src/uname.c b/src/uname.c new file mode 100644 index 0000000..0fbef58 --- /dev/null +++ b/src/uname.c @@ -0,0 +1,67 @@ +#define _POSIX_C_SOURCE 2 +#include +#include +#include +#include +#include + +enum name +{ + NAME_SYSNAME = 1 << 0, + NAME_NODENAME = 1 << 1, + NAME_RELEASE = 1 << 2, + NAME_VERSION = 1 << 3, + NAME_MACHINE = 1 << 4, + NAME_ALL = NAME_SYSNAME | NAME_NODENAME | NAME_RELEASE | NAME_VERSION | NAME_MACHINE, +}; + +static void print_name(char *name) +{ + static bool previous = false; + if (previous) + fputc(' ' ,stdout); + else + previous = true; + fputs(name, stdout); +} + +int main(int argc, char *argv[]) +{ + enum name names = 0; + int option; + while ((option = getopt(argc, argv, "amnrsv")) != -1) + { + switch (option) + { + case 'a': names |= NAME_ALL; break; + case 'm': names |= NAME_MACHINE; break; + case 'n': names |= NAME_NODENAME; break; + case 'r': names |= NAME_RELEASE; break; + case 's': names |= NAME_SYSNAME; break; + case 'v': names |= NAME_VERSION; break; + } + } + if (optind != argc) + { + fprintf(stderr, "%s: extra operand '%s'\n", argv[0], argv[optind]); + exit(1); + } + if (names == 0) + names = NAME_SYSNAME; + + struct utsname names_buf; + uname(&names_buf); + + if (names & NAME_SYSNAME) + print_name(names_buf.sysname); + if (names & NAME_NODENAME) + print_name(names_buf.nodename); + if (names & NAME_RELEASE) + print_name(names_buf.release); + if (names & NAME_VERSION) + print_name(names_buf.version); + if (names & NAME_MACHINE) + print_name(names_buf.machine); + fputc('\n', stdout); + return 0; +} -- cgit