【问题标题】:Processing C command line arguments处理 C 命令行参数
【发布时间】:2013-05-08 11:59:54
【问题描述】:

如何在包管理器中处理多个命令行参数?我正在尝试编写一个包管理器,现在接受要安装的包让我很头疼。例如,用户想要安装包 x、y 和 z。现在我的代码将向一个函数发送 3 个不同的请求。我想一口气得到所有的包名。因此,例如,用户想要安装包 x、y 和 z,它将被处理,我的代码将向函数发送请求,说明它需要 x、y 和 z,并且该函数将立即开始工作。

这是我当前的实现...

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;

【问题讨论】:

    标签: c parsing command-line parameters package-managers


    【解决方案1】:

    你也可以试试libargtable。 我之前用它来解析各种参数,非常好用。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 是的,已经尝试过了...不幸的是,不符合我的需求...谢谢! :D
      【解决方案3】:

      我想你要找的是getopt

      文档说

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

      【讨论】:

      • 我已经尝试过getopt。它不符合我的需要——选项。例如 --force-yes ......无论如何,谢谢! :)
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2014-01-13
      相关资源
      最近更新 更多