找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3325|回复: 0

Linux下启动参数例子

[复制链接]
发表于 2013-9-24 10:10:53 | 显示全部楼层 |阅读模式
可以输入启动参数。不过我觉得optarg在getopt.h定义有点过于生硬。
虽说是C的标准做法,但是是否能传入一个指针进去更为好些?
虽说有C的写法,但是我还是比较喜欢一些C++的特性,于是一般这么用,在这里记录一下。以便以后查阅。
  1. #include <getopt.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. //add by freeeyes
  6. //支持长命名,可以任意添加
  7. static struct option long_options[] = {
  8.     { "help",           no_argument,        NULL,   'h' },
  9.     { "version",        required_argument,  NULL,   'v' },
  10.     { "index",          required_argument,  NULL,   'i' },
  11.     { "run",            required_argument,  NULL,   'r' },
  12.     { "args",           required_argument,  NULL,   'a' },
  13.     { NULL,             0,                  NULL,    0  }
  14. };
  15. //短命名
  16. static char short_options[] = "hv:i:r:a:";
  17. struct _ProcessArgs
  18. {
  19.         int  nIndex;
  20.         bool blIsRun;
  21.         int  nVersion;
  22.         char szArgText[100];
  23.        
  24.         _ProcessArgs()
  25.         {
  26.                 nIndex       = 0;
  27.                 nVersion     = 0;
  28.                 blIsRun      = false;
  29.                 szArgText[0] = '\0';
  30.         }
  31.        
  32.         void display()
  33.         {
  34.                 printf("[display]nIndex=%d.\n", nIndex);
  35.                 if(blIsRun == true)
  36.                 {
  37.                         printf("[display]blIsRun is true.\n");
  38.                 }
  39.                 else
  40.                 {
  41.                         printf("[display]blIsRun is false.\n");
  42.                 }
  43.                 printf("[display]nVersion=%d.\n", nVersion);
  44.                 printf("[display]szArgText=%s.\n", szArgText);
  45.         }
  46. };
  47. static void HelpCommand()
  48. {
  49.         printf("[Help]**************************************.\n");
  50.         printf("[Help] -h, --help             : this help.\n");
  51.         printf("[Help] -v, --version          : this version.\n");
  52.         printf("[Help] -i, --index            : this index.\n");
  53.         printf("[Help] -r, --run              : this run.\n");
  54.         printf("[Help] -a, --args             : this args.\n");
  55.         printf("[Help]**************************************.\n");
  56. }
  57. static int get_options(int argc, char **argv, struct _ProcessArgs *pProcessArgs)
  58. {
  59.           int nRet = -1;
  60.     for (;;)
  61.     {
  62.                         nRet = getopt_long(argc, argv, short_options, long_options, NULL);
  63.       if (nRet == -1)
  64.       {
  65.           //没有更多的命令了
  66.           break;
  67.       }
  68.       switch (nRet)
  69.       {
  70.               case 'h':
  71.                  HelpCommand();
  72.           break;
  73.         case 'v':
  74.                 pProcessArgs->nVersion = atoi(optarg);
  75.                 break;
  76.         case 'i':
  77.                 pProcessArgs->nIndex = atoi(optarg);
  78.                 break;
  79.         case 'r':
  80.                 if(strcmp(optarg, "true") == 0)
  81.                 {
  82.                         pProcessArgs->blIsRun = true;
  83.                 }
  84.                 else
  85.                 {
  86.                         pProcessArgs->blIsRun = false;
  87.                 }
  88.                 break;
  89.         case 'a':
  90.                 sprintf(pProcessArgs->szArgText, "%s", optarg);
  91.                 break;                     
  92.       }                
  93.     }
  94. }
  95. int main(int argc, char **argv)
  96. {
  97.         _ProcessArgs* pProcessArgs = new _ProcessArgs();
  98.         get_options(argc, argv, pProcessArgs);
  99.         pProcessArgs->display();
  100.         delete pProcessArgs;
  101.         return 0;
  102. }
复制代码
编译:
g++ -o Testarg Testarg.cpp

运行:
./Testarg -h
输出:
[Help]**************************************.
[Help] -h, --help             : this help.
[Help] -v, --version          : this version.
[Help] -i, --index            : this index.
[Help] -r, --run              : this run.
[Help] -a, --args             : this args.
[Help]**************************************.
[display]nIndex=0.
[display]blIsRun is false.
[display]nVersion=0.
[display]szArgText=.

运行:
./Testarg -h -v 10 -i 11 -r true -a freeeyes

结果:
[Help]**************************************.
[Help] -h, --help             : this help.
[Help] -v, --version          : this version.
[Help] -i, --index            : this index.
[Help] -r, --run              : this run.
[Help] -a, --args             : this args.
[Help]**************************************.
[display]nIndex=11.
[display]blIsRun is true.
[display]nVersion=10.
[display]szArgText=freeeyes.



您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-30 04:56 , Processed in 0.010884 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表