master xplshn/aruu / cmd / posix / uname.c
 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}