2013-05-14 78 views
1

如何在包管理器中处理多个命令行参数?我正在写一个软件包管理器,现在接受要安装的软件包让我非常头疼。例如,用户想要安装软件包x,y和z。现在我的代码会向一个函数发送3个不同的请求。我想一次性获得所有包名称。例如,用户想要安装软件包x,y和z,它将被处理,我的代码会向一个函数发送一个请求,声明它需要x,y和z,函数将立即开始工作。处理C命令行参数

这里是我当前的实现......

case 'S': 
    switch (argv[1][2]) { 
     case 'u': 
      id = 1; 
      alfred("system", "update", "", id); 
      break; 

     case 'r': 
      id = 1; 
      alfred("system", "reload", "", id); 
      break; 

     case 'i': 
      if (argc - 2 != 0) { 
       // Loop until packages are complete. 
       packages = 2; // Starting point of packages = argv[2][0] 
       srand(time(NULL)); // Seed for random number 
       id = rand(); // Generate random number for id 
       argc = argc - 2 + 1; // argc minus the number of packages and plus 1 
       /* This is a very inefficent loop! */ 
       /* Must get all targets and feed it to alfred */ 
       while (packages <= argc) { 
        alfred("system", "install", &argv[packages][0], id); 
        packages++; 
       } 
      } else { 
       printf("Unrecognized format. Execute alfred -h for more information.\n"); 
      } 
      break; 

     default: 
      printf("Unrecognized format. Execute alfred -h for more information.\n"); 
      break; 
    } 
    break; 

回答

0

您也可以尝试libargtable。 我以前用它来解析各种参数,它非常方便。

+0

谢谢!这对我有用! :) – 2013-05-15 14:31:07

0

我想你正在寻找的是getopt

的文件说

的getopt()函数解析命令行参数。它的参数argc和argv是在程序调用时传递给main()函数的参数count和 数组。一个以' - '开头的元素(并且是 不完全是“ - ”或“ - ”)是一个选项元素。这个元素的字符(除了最初的' - ')是 选项字符。如果重复调用getopt(),则会连续返回每个选项元素 中的每个选项字符。

+0

我已经尝试getopt。它不符合我的需要,因为我需要 - 选项。例如--force-yes ...无论如何感谢! :) – 2013-05-15 14:32:09