|
|
1.1 root 1: /*
2: * uname.c
3: * Print information about current COHERENT system.
4: */
5:
6: #include <stdio.h>
7: #include <fcntl.h>
8: #include <sys/utsname.h>
9: #include <string.h>
10:
11: main(argc, argv)
12: int argc;
13: char *argv[];
14: {
15: extern char *optarg;
16: extern int optind;
17: static int snf = 0, /* Default */
18: nnf = 0,
19: srf = 0,
20: svf = 0,
21: mhf = 0,
22: Snf = 0;
23: char *sname;
24: int c;
25: struct utsname tsname;
26:
27: while ((c = getopt(argc, argv, "snrvmaS:")) != EOF)
28: switch (c) {
29: case 's': /* Print system name (default). */
30: snf = 1;
31: break;
32: case 'n': /* Print node name */
33: nnf = 1;
34: break;
35: case 'r': /* Print system release */
36: srf = 1;
37: break;
38: case 'v': /* Print system version */
39: svf = 1;
40: break;
41: case 'm': /* Print machine hardware name */
42: mhf = 1;
43: break;
44: case 'a': /* Print all above */
45: nnf = srf = svf = mhf = 1;
46: break;
47: case 'S': /* Change system name */
48: Snf = 1;
49: sname = optarg;
50: break;
51: default:
52: usage();
53: }
54: if ((snf || nnf || srf || svf || mhf) && Snf)
55: usage();
56: if (Snf)
57: changename(sname);
58: else {
59: int space;
60:
61: if (uname(&tsname) < 0) {
62: perror("uname");
63: exit(1);
64: }
65: space = 0;
66: if (snf) {
67: printf("%.*s", SYS_NMLN, tsname.sysname);
68: space = 1;
69: }
70: if (nnf) {
71: if (space)
72: putchar(' ');
73: printf("%.*s", SYS_NMLN, tsname.nodename);
74: space = 1;
75: }
76: if (srf) {
77: if (space)
78: putchar(' ');
79: printf("%.*s", SYS_NMLN, tsname.release);
80: space = 1;
81: }
82: if (svf) {
83: if (space)
84: putchar(' ');
85: printf("%.*s", SYS_NMLN, tsname.version);
86: space = 1;
87: }
88: if (mhf) {
89: if (space)
90: putchar(' ');
91: printf("%.*s", SYS_NMLN, tsname.machine);
92: }
93: putchar('\n');
94: }
95: exit(0);
96: }
97:
98: /*
99: * Change system name.
100: */
101: changename(sname)
102: char *sname;
103: {
104: char newname[SYS_NMLN + 2];
105: int fd;
106: char *uucpname = "/etc/uucpname";
107:
108: if (strlen(sname) >= SYS_NMLN) {
109: fprintf(stderr, "uname: name must be <= 8 characters.\n");
110: exit(1);
111: }
112: strcpy(newname, sname);
113: strcat(newname, "\n");
114: if ((fd = open(uucpname, O_RDWR | O_TRUNC, 0644)) < 0) {
115: perror("uname");
116: exit(1);
117: }
118: if (write(fd, newname, strlen(newname)) != strlen(newname)) {
119: perror("uname");
120: exit(1);
121: }
122: }
123:
124: usage()
125: {
126: printf("usage:\tuname [-snrvma]\n\tuname [-S system_name]\n");
127: exit(1);
128: }
129:
130: /* end of uname.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.