1 #include <stdlib.h> 2 #include <sys/utsname.h> 3 #include <stdio.h> 4 5 #define ARGBEGIN for((argv0=*argv),argv++,argc--;\ 6 argv[0] && argv[0][0]=='-' && argv[0][1];\ 7 argc--, argv++) {\ 8 char *_args, *_argt, _argc;\ 9 _args = &argv[0][1];\ 10 if(_args[0]=='-' && _args[1]==0){\ 11 argc--; argv++; break;\ 12 }\ 13 while(*_args) switch(_argc=*_args++) 14 #define ARGEND } 15 #define ARGF() (_argt=_args, _args="",\ 16 (*_argt? _argt: argv[1]? (argc--, *++argv): 0)) 17 #define ARGC() _argc 18 char *argv0; 19 20 main(int argc, char **argv) 21 { 22 struct utsname u; 23 24 uname(&u); 25 if(argc == 1){ 26 printf("%s\n", u.sysname); 27 exit(0); 28 } 29 ARGBEGIN { 30 case 'a': 31 printf("%s %s %s %s %s\n", u.sysname, u.nodename, 32 u.release, u.version, u.machine); 33 break; 34 case 'm': 35 printf("%s\n", u.machine); 36 break; 37 case 'n': 38 printf("%s\n", u.nodename); 39 break; 40 case 'r': 41 printf("%s\n", u.release); 42 break; 43 case 's': 44 printf("%s\n", u.sysname); 45 break; 46 case 'v': 47 printf("%s\n", u.version); 48 break; 49 } ARGEND 50 exit(0); 51 } 52