master xplshn/aruu / cmd / posix / uname.c
 1/* See LICENSE file for copyright and license details. */
 2
 3#include <sys/utsname.h>
 4
 5#include <stdio.h>
 6
 7#include "util.h"
 8
 9static void
10usage(void)
11{
12  eprintf("usage: %s [-amnrsv]\n", argv0);
13}
14
15// ?man uname: print system info
16// ?man display system hostname, kernel name, release, and architecture
17int
18main(int argc, char *argv[])
19{
20  struct utsname u;
21  int            mflag = 0, nflag = 0, rflag = 0, sflag = 0, vflag = 0;
22
23  ARGBEGIN
24  {
25    // ?man -a: print or show all entries
26    case 'a':
27      mflag = nflag = rflag = sflag = vflag = 1;
28      break;
29    // ?man -m: specify mode or limit
30    case 'm':
31      mflag = 1;
32      break;
33    // ?man -n: print line numbers or counts
34    case 'n':
35      nflag = 1;
36      break;
37    // ?man -r: operate recursively
38    case 'r':
39      rflag = 1;
40      break;
41    // ?man -s: silent mode or print summary
42    case 's':
43      sflag = 1;
44      break;
45    // ?man -v: verbose mode; show progress
46    case 'v':
47      vflag = 1;
48      break;
49    default:
50      usage();
51  }
52  ARGEND
53
54  if (argc)
55    usage();
56
57  if (uname(&u) < 0)
58    eprintf("uname:");
59
60  if (sflag || !(nflag || rflag || vflag || mflag))
61    putword(stdout, u.sysname);
62  if (nflag)
63    putword(stdout, u.nodename);
64  if (rflag)
65    putword(stdout, u.release);
66  if (vflag)
67    putword(stdout, u.version);
68  if (mflag)
69    putword(stdout, u.machine);
70  putchar('\n');
71
72  return fshut(stdout, "<stdout>");
73}