当我在Unix下运行C程序时,如何读取参数作为选项?

时间:2014-10-08 02:29:00

标签: c getopt

我想像这样设置c程序的参数。

$./Program_name -a 100 -b 5 -c 30 

我想在程序中使用此值abc

例如:

int count = a;
int number = b;
int limit_exec = c;

我不知道它是如何运作的。我无法在谷歌找到它......我想看一些例子。

此外,与此同时,我想制作默认值和价值限制。

  1. 设置这样的限制:值a只能包含1到10000之间的数字。

  2. 当我没有投入价值时使用默认值 像这样:

    $./program -a 100 -c 30    // then value 'b' should use default number.
    

    我不知道如何设置默认值。可以像这样在c代码中设置默认值吗?

       #define a 50   
       #define b 100   
       #define c 30
    

1 个答案:

答案 0 :(得分:4)

您可以使用getopt来解析命令行输入 有关简要介绍,请参阅man页面。

$ man 3 getopt

以下代码可根据您的要求运行。

<强>代码:

#include <stdio.h>
#include <unistd.h> /* Definition of getopt */
#include <stdlib.h> /* Definition of atoi */ 

int main (int argc, char ** argv)
{
    char option;

    /* Default Values */
    int count = 10, number = 20, limit = 30;

    while (-1 != (option = getopt (argc, argv, "a:b:c:")))
    {   
        switch (option)
        {
            case 'a':
                count = atoi(optarg);

                /* Check for limit */
                if (count <= 0 || count > 1000)
                {
                        printf("Usage <%s> [a] value, Range of value : 1-1000\n", argv[0]);
                        exit(EXIT_FAILURE);
                }
                break;

            case 'b':
                number = atoi(optarg);
                break;

            case 'c':
                limit = atoi(optarg);
                break;

            default:
                printf ("Usage: <%s> [a] value [b] value [c] value\n", argv[0]);
        }
    }

    printf("\nCount:[%d]\tNumber:[%d]\tlimit:[%d]\n\n", count, number, limit);
    return 0;
}

编译: gcc -o exe filename.c -Wall

<强>执行:

$ ./exe     /* Default values */
Count:[10]  Number:[20] limit:[30]

$ ./exe -a 1 -b 2 -c 3
Count:[1]   Number:[2]  limit:[3]

$ ./exe -a 1  -c 3
Count:[1]   Number:[20] limit:[3]

$ ./exe -a 9999  /* Same output for ./exe -a -1 */
Usage <./exe> [a] value, Range of Value : 1-1000