处理C命令行参数

时间:2013-05-14 09:12:29

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

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

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为你要找的是getopt

文件说

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