dmesg.c 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "dmesg.h"
  2. /**
  3. * @brief 识别dmesg程序的第一个选项参数
  4. *
  5. * @param arg dmesg命令第一个选项参数
  6. * @return int 有效时返回对应选项码,无效时返回 -1
  7. */
  8. int getopt(char *arg)
  9. {
  10. if (!strcmp(arg, "-h") || !strcmp(arg, "--help"))
  11. return 0;
  12. else if (!strcmp(arg, "-c") || !strcmp(arg, "--read-clear"))
  13. return 4;
  14. else if (!strcmp(arg, "-C") || !strcmp(arg, "--clear"))
  15. return 5;
  16. else if (!strcmp(arg, "-l") || !strcmp(arg, "--level"))
  17. return 8;
  18. return -1;
  19. }
  20. /**
  21. * @brief 识别dmesg程序的第二个选项参数
  22. *
  23. * @param arg dmesg命令第一个选项参数
  24. * @return int 有效时返回设置的日志级别,无效时返回 -1
  25. */
  26. int getlevel(char *arg)
  27. {
  28. if (!strcmp(arg, "EMERG") || !strcmp(arg, "emerg"))
  29. return 0;
  30. else if (!strcmp(arg, "ALERT") || !strcmp(arg, "alert"))
  31. return 1;
  32. else if (!strcmp(arg, "CRIT") || !strcmp(arg, "crit"))
  33. return 2;
  34. else if (!strcmp(arg, "ERR") || !strcmp(arg, "err"))
  35. return 3;
  36. else if (!strcmp(arg, "WARN") || !strcmp(arg, "warn"))
  37. return 4;
  38. else if (!strcmp(arg, "NOTICE") || !strcmp(arg, "notice"))
  39. return 5;
  40. else if (!strcmp(arg, "INFO") || !strcmp(arg, "info"))
  41. return 6;
  42. else if (!strcmp(arg, "DEBUG") || !strcmp(arg, "debug"))
  43. return 7;
  44. else
  45. {
  46. printf("dmesg: unknown level '%s'\n", arg);
  47. }
  48. return -2;
  49. }
  50. /**
  51. * @brief 打印dmesg手册
  52. */
  53. void print_help_msg()
  54. {
  55. const char *help_msg = "Usage:\n"
  56. " dmesg [options]\n\n"
  57. "Display or control the kernel ring buffer.\n\n"
  58. "Options:\n"
  59. " -C, --clear clear the kernel ring buffer\n"
  60. " -c, --read-clear read and clear all messages\n"
  61. " -l, --level <list> restrict output to defined levels\n"
  62. " -h, --help display this help\n\n"
  63. "Supported log levels (priorities):\n"
  64. " emerg - system is unusable\n"
  65. " alert - action must be taken immediately\n"
  66. " crit - critical conditions\n"
  67. " err - error conditions\n"
  68. " warn - warning conditions\n"
  69. " notice - normal but significant condition\n"
  70. " info - informational\n"
  71. " debug - debug-level messages\n";
  72. printf("%s\n", help_msg);
  73. }
  74. /**
  75. * @brief 打印dmesg错误使用的信息
  76. */
  77. void print_bad_usage_msg()
  78. {
  79. const char *bad_usage_msg = "dmesg: bad usage\nTry 'dmesg --help' for more information.";
  80. printf("%s\n", bad_usage_msg);
  81. }