1/* See LICENSE file for copyright and license details. */
2
3
4#include <sys/utsname.h>
5
6#include <stdio.h>
7
8#include "util.h"
9
10static void
11usage(void)
12{
13 eprintf("usage: %s [-amnrsv]\n", argv0);
14}
15
16// ?man uname: print system info
17// ?man display system hostname, kernel name, release, and architecture
18int
19main(int argc, char *argv[])
20{
21 struct utsname u;
22 int mflag = 0, nflag = 0, rflag = 0, sflag = 0, vflag = 0;
23
24 ARGBEGIN {
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 } ARGEND
52
53 if (argc)
54 usage();
55
56 if (uname(&u) < 0)
57 eprintf("uname:");
58
59 if (sflag || !(nflag || rflag || vflag || mflag))
60 putword(stdout, u.sysname);
61 if (nflag)
62 putword(stdout, u.nodename);
63 if (rflag)
64 putword(stdout, u.release);
65 if (vflag)
66 putword(stdout, u.version);
67 if (mflag)
68 putword(stdout, u.machine);
69 putchar('\n');
70
71 return fshut(stdout, "<stdout>");
72}