hmain.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef H_MAIN_H_
  2. #define H_MAIN_H_
  3. #include "hplatform.h"
  4. #include "hdef.h"
  5. #include "hstring.h"
  6. #include "hproc.h"
  7. typedef struct main_ctx_s {
  8. pid_t oldpid; // getpid_from_pidfile
  9. pid_t pid; // getpid
  10. char run_path[MAX_PATH];
  11. char program_name[MAX_PATH];
  12. int argc;
  13. int arg_len;
  14. char** os_argv;
  15. char** save_argv;
  16. char* cmdline;
  17. int envc;
  18. int env_len;
  19. char** os_envp;
  20. char** save_envp;
  21. char confile[MAX_PATH]; // default etc/${program}.conf
  22. char pidfile[MAX_PATH]; // default logs/${program}.pid
  23. char logfile[MAX_PATH]; // default logs/${program}.log
  24. keyval_t arg_kv;
  25. StringList arg_list;
  26. keyval_t env_kv;
  27. } main_ctx_t;
  28. // arg_type
  29. #define NO_ARGUMENT 0
  30. #define REQUIRED_ARGUMENT 1
  31. #define OPTIONAL_ARGUMENT 2
  32. // option define
  33. #define OPTION_PREFIX '-'
  34. #define OPTION_DELIM '='
  35. #define OPTION_ENABLE "on"
  36. #define OPTION_DISABLE "off"
  37. typedef struct option_s {
  38. char short_opt;
  39. const char* long_opt;
  40. int arg_type;
  41. } option_t;
  42. int main_ctx_init(int argc, char** argv);
  43. // ls -a -l
  44. // ls -al
  45. // watch -n 10 ls
  46. // watch -n10 ls
  47. int parse_opt(int argc, char** argv, const char* opt);
  48. // gcc -g -Wall -O3 -std=cpp main.c
  49. int parse_opt_long(int argc, char** argv, const option_t* long_options, int size);
  50. const char* get_arg(const char* key);
  51. const char* get_env(const char* key);
  52. #ifdef OS_UNIX
  53. void setproctitle(const char* title);
  54. #endif
  55. // pidfile
  56. int create_pidfile();
  57. void delete_pidfile();
  58. pid_t getpid_from_pidfile();
  59. // signal=[start,stop,restart,status,reload]
  60. int signal_init(procedure_t reload_fn = NULL, void* reload_userdata = NULL);
  61. void handle_signal(const char* signal);
  62. #ifdef OS_UNIX
  63. // we use SIGTERM to quit process, SIGUSR1 to reload confile
  64. #define SIGNAL_TERMINATE SIGTERM
  65. #define SIGNAL_RELOAD SIGUSR1
  66. void signal_handler(int signo);
  67. #endif
  68. // global var
  69. #define DEFAULT_WORKER_PROCESSES 4
  70. #define MAXNUM_WORKER_PROCESSES 1024
  71. extern main_ctx_t g_main_ctx;
  72. extern int g_worker_processes_num;
  73. extern proc_ctx_t* g_worker_processes;
  74. #endif // H_MAIN_H_