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}