Home | History | Annotate | Line # | Download | only in uname
uname.c revision 1.2
      1  1.1      cgd /*
      2  1.1      cgd  * uname - print system information. Jeff Comstock - Bloomington, MN USA 1992
      3  1.1      cgd  * Usage: uname [-asnrvm]
      4  1.1      cgd  * -s prints system name
      5  1.1      cgd  * -n prints nodename
      6  1.1      cgd  * -r prints software release
      7  1.1      cgd  * -v prints os version
      8  1.1      cgd  * -m prints machine name
      9  1.1      cgd  * -a prinst all the above information
     10  1.2  mycroft  */
     11  1.2  mycroft 
     12  1.2  mycroft #ifndef lint
     13  1.2  mycroft static char rcsid[] = "$Id: uname.c,v 1.2 1993/08/02 17:56:27 mycroft Exp $";
     14  1.2  mycroft #endif /* not lint */
     15  1.2  mycroft 
     16  1.1      cgd #include <stdio.h>
     17  1.1      cgd #include <unistd.h>
     18  1.1      cgd #include <sys/utsname.h>
     19  1.1      cgd 
     20  1.1      cgd #define SYSNAME 	0
     21  1.1      cgd #define NODENAME 	1
     22  1.1      cgd #define RELEASE 	2
     23  1.1      cgd #define VERSION 	3
     24  1.1      cgd #define MACHINE 	4
     25  1.1      cgd 
     26  1.1      cgd struct utsname u;
     27  1.1      cgd 
     28  1.1      cgd struct utstab {
     29  1.1      cgd 	char *str;
     30  1.1      cgd 	int requested;
     31  1.1      cgd } uttab[] = {
     32  1.1      cgd 	{ u.sysname, 	0 },
     33  1.1      cgd 	{ u.nodename, 	0 },
     34  1.1      cgd 	{ u.release, 	0 },
     35  1.1      cgd 	{ u.version, 	0 },
     36  1.1      cgd 	{ u.machine, 	0 }
     37  1.1      cgd };
     38  1.1      cgd 
     39  1.1      cgd main(int argc, char **argv) {
     40  1.1      cgd char *opts="amnrsv";
     41  1.1      cgd register int c,space, all=0;
     42  1.1      cgd 
     43  1.1      cgd 	if ( ! uname(&u) ) {
     44  1.1      cgd 		if ( argc == 1 ) {
     45  1.1      cgd 			puts(u.sysname);
     46  1.1      cgd 		} else {
     47  1.1      cgd 			while ( (c = getopt(argc,argv,opts)) != -1 ) {
     48  1.1      cgd 					switch ( c ) {
     49  1.1      cgd 					case 'a' : all++;
     50  1.1      cgd 						break;
     51  1.1      cgd 					case 'm' : uttab[MACHINE].requested++;
     52  1.1      cgd 						break;
     53  1.1      cgd 					case 'n' : uttab[NODENAME].requested++;
     54  1.1      cgd 						break;
     55  1.1      cgd 					case 'r' : uttab[RELEASE].requested++;
     56  1.1      cgd 						break;
     57  1.1      cgd 					case 's' : uttab[SYSNAME].requested++;
     58  1.1      cgd 						break;
     59  1.1      cgd 					case 'v' : uttab[VERSION].requested++;
     60  1.1      cgd 						break;
     61  1.1      cgd 				}
     62  1.1      cgd 			}
     63  1.1      cgd 			space=0;
     64  1.1      cgd 			for(c=0; c <= MACHINE; c++) {
     65  1.1      cgd 				if ( uttab[c].requested || all ) {
     66  1.1      cgd 					if ( space )
     67  1.1      cgd 						putchar(' ');
     68  1.1      cgd 					printf("%s", uttab[c].str);
     69  1.1      cgd 					space++;
     70  1.1      cgd 				}
     71  1.1      cgd 			}
     72  1.1      cgd 			puts("");
     73  1.1      cgd 		}
     74  1.1      cgd 	}
     75  1.1      cgd 	else
     76  1.1      cgd 		perror("uname");
     77  1.1      cgd }
     78