1 /*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char copyright[] = 10 "@(#) Copyright (c) 1993\n\ 11 The Regents of the University of California. All rights reserved.\n"; 12 #endif /* not lint */ 13 14 #ifndef lint 15 static char sccsid[] = "@(#)uname.c 8.2 (Berkeley) 05/04/95"; 16 #endif /* not lint */ 17 18 #include <sys/param.h> 19 #include <sys/sysctl.h> 20 21 #include <err.h> 22 #include <stdio.h> 23 #include <stdlib.h> 24 #include <unistd.h> 25 26 void usage __P((void)); 27 28 int 29 main(argc, argv) 30 int argc; 31 char *argv[]; 32 { 33 #define MFLAG 0x01 34 #define NFLAG 0x02 35 #define RFLAG 0x04 36 #define SFLAG 0x08 37 #define VFLAG 0x10 38 u_int flags; 39 int ch, mib[2]; 40 size_t len, tlen; 41 char *p, *prefix, buf[1024]; 42 43 flags = 0; 44 while ((ch = getopt(argc, argv, "amnrsv")) != EOF) 45 switch(ch) { 46 case 'a': 47 flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG); 48 break; 49 case 'm': 50 flags |= MFLAG; 51 break; 52 case 'n': 53 flags |= NFLAG; 54 break; 55 case 'r': 56 flags |= RFLAG; 57 break; 58 case 's': 59 flags |= SFLAG; 60 break; 61 case 'v': 62 flags |= VFLAG; 63 break; 64 case '?': 65 default: 66 usage(); 67 } 68 69 argc -= optind; 70 argv += optind; 71 72 if (argc) 73 usage(); 74 75 if (!flags) 76 flags |= SFLAG; 77 78 prefix = ""; 79 80 if (flags & SFLAG) { 81 mib[0] = CTL_KERN; 82 mib[1] = KERN_OSTYPE; 83 len = sizeof(buf); 84 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) 85 err(1, "sysctl"); 86 (void)printf("%s%.*s", prefix, len, buf); 87 prefix = " "; 88 } 89 if (flags & NFLAG) { 90 mib[0] = CTL_KERN; 91 mib[1] = KERN_HOSTNAME; 92 len = sizeof(buf); 93 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) 94 err(1, "sysctl"); 95 (void)printf("%s%.*s", prefix, len, buf); 96 prefix = " "; 97 } 98 if (flags & RFLAG) { 99 mib[0] = CTL_KERN; 100 mib[1] = KERN_OSRELEASE; 101 len = sizeof(buf); 102 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) 103 err(1, "sysctl"); 104 (void)printf("%s%.*s", prefix, len, buf); 105 prefix = " "; 106 } 107 if (flags & VFLAG) { 108 mib[0] = CTL_KERN; 109 mib[1] = KERN_VERSION; 110 len = sizeof(buf); 111 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) 112 err(1, "sysctl"); 113 for (p = buf, tlen = len; tlen--; ++p) 114 if (*p == '\n' || *p == '\t') 115 *p = ' '; 116 (void)printf("%s%.*s", prefix, len, buf); 117 prefix = " "; 118 } 119 if (flags & MFLAG) { 120 mib[0] = CTL_HW; 121 mib[1] = HW_MACHINE; 122 len = sizeof(buf); 123 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) 124 err(1, "sysctl"); 125 (void)printf("%s%.*s", prefix, len, buf); 126 prefix = " "; 127 } 128 (void)printf("\n"); 129 exit (0); 130 } 131 132 void 133 usage() 134 { 135 (void)fprintf(stderr, "usage: uname [-amnrsv]\n"); 136 exit(1); 137 } 138