Linux C++命令行参数、捕捉信号

读取命令行参数

  1. 如下参考
    int opt;
    while ((opt = getopt(argc, argv, "f:vh")) != -1)
    {
        switch(opt)
        {
        case 'v':
            message_prog("-v 打印全部调试信息");
            break;
        case 'f':
            message_prog("-f 重定向json文件为 %s",optarg);
            break;
        case 'h':
        default:
            _print_usage();
            exit(0);
        }
    }
  2. int getopt(int argc,char * const argv[ ],const char * optstring);函数用于获取命令行参数,argcargv直接由main函数参数传入,optstring为控制串,用于指定命令行参数的解析方式。
  3. 单个字符:表示该命令行参数为一个选项;
  4. 单个字符后接一个冒号:表示该命令行参数必须带一个参数,该参数可以直接连接或用空格隔开;
  5. 单个字符后接两个冒号:表示该命令行参数可以带一个参数,若带参数则必须紧跟在命令行选项后,不能有空格。
  6. 若该命令行选项带参数,则参数字符串由全局指针optarg指示。

捕获信号

  1. 参考

    static void sigHandler(int sig)
    {
        message_ok("捕获到信号%d",sig);
    }
    
    int main()
    {
        ...
        struct sigaction sa = {{0}};
        sa.sa_handler = sigHandler;
        sigemptyset(&sa.sa_mask);
        sa.sa_flags = 0;
    
        sigaction(SIGINT, &sa, NULL);
        sigaction(SIGTERM, &sa, NULL);
        sigaction(SIGQUIT, &sa, NULL);
        sigaction(SIGUSR1, &sa, NULL);
        sigaction(SIGUSR2, &sa, NULL);
        ...
    }

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注