1

如何在包管理器中处理多个命令行参数?我正在尝试编写一个包管理器,现在接受要安装的包让我很头疼。例如,用户想要安装包 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;
4

3 回答 3

0

您是否尝试过 getopt 库?

http://www.gnu.org/software/libc/manual/html_node/Getopt.html

于 2013-05-14T09:14:57.363 回答
0

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

于 2013-05-14T09:17:05.677 回答
0

我认为您正在寻找的是getopt

文件说

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

于 2013-05-14T10:29:53.207 回答