uname.c 1.0 KB

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