argument.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "__virtualmath.h"
  2. static const struct option long_option[]={
  3. {"input",required_argument,NULL,'i'},
  4. {"stdout",no_argument,NULL,'s'},
  5. #if OUT_LOG
  6. {"log",required_argument,NULL,'l'},
  7. {"debug",no_argument,&args.level,DEBUG},
  8. {"ddebug",no_argument,&args.level,DEEP_DEBUG},
  9. {"ldebug",no_argument,&args.level,LEXICAL_DEBUG},
  10. {"lcdebug",no_argument,&args.level,LEXICAL_CHECKOUT_DEBUG},
  11. {"info",no_argument,&args.level,INFO},
  12. #endif
  13. // 最后一个元素应该全为0
  14. {NULL,0,NULL,0}
  15. };
  16. #if OUT_LOG
  17. static const char *short_option = "si:l:";
  18. #else
  19. const char *short_option = "si:";
  20. #endif
  21. /**
  22. * 参数设置, args是全局结构体, 保存全局的参数设置
  23. * @param argc
  24. * @param argv
  25. * @return
  26. */
  27. int getArgs(int argc, char *argv[])
  28. {
  29. args.file = NULL;
  30. args.log_file = NULL;
  31. args.level = LEXICAL_CHECKOUT_DEBUG;
  32. args.stdout_inter = false;
  33. opterr = false;
  34. int opt;
  35. while((opt=getopt_long(argc,argv,short_option ,long_option,NULL))!=-1)
  36. {
  37. switch(opt)
  38. {
  39. case 0:
  40. break;
  41. case 'i':
  42. args.file = memStrcpy(optarg);
  43. break;
  44. case 'l':
  45. args.log_file = memStrcpy(optarg);
  46. break;
  47. case 's':
  48. args.stdout_inter = true;
  49. break;
  50. case '?':
  51. printf("[Error]: get not success args : -%c\n", (char)optopt);
  52. return -1;
  53. default:
  54. break;
  55. }
  56. }
  57. if (args.file == NULL){
  58. if (argc > optind){
  59. args.file = memStrcpy(argv[optind]);
  60. }
  61. else{
  62. return -1;
  63. }
  64. }
  65. return 0;
  66. }
  67. /**
  68. * 释放args的成员而不包括其本身
  69. */
  70. void freeArgs(void){
  71. memFree(args.file);
  72. memFree(args.file);
  73. }