Linux c 开发 - 命令行参数和getopt方法的使用细节

命令行参数

在c语言的入口函数main方法中,可以添加两个参数:argcargv。通过这两个参数,我们就可以在可执行文件执行的时候将自定义的参数传递到程序中。

看一个例子:

#include <stdio.h>
#include <unistd.h>

int main (int argc, char *argv[])
{

    printf("argc:%d\r\n", argc);
    printf("argv:%s argv1:%s argv2:%s argv3:%s\r\n\r\n", argv[0], argv[1], argv[2], argv[3]);
   return 0;
}
argc:这个参数主要告诉程序有多少个参数,每个参数在命令行上是通过空格分隔开的。

argv:用于存储命令行参数的字符指针数组。

执行结果:

[admin@localhost ~]$ ./main -p1024 -n10 -c
argc:4
argv:./main argv1:-p1024 argv2:-n10 argv3:-c


getopt方法

头文件:

 #include<unistd.h>
函数定义:

int getopt(int argc,char * const argv[ ],const char * optstring);

使用了getopt方法后,命令行参数就可以像这样使用短参数模式:./main -p1024 -n10 -c

optstring参数定义规则:

1. 如果使用-p1024或者-p 1024这样的短参数方式,则在optstring中需要定义:p:。p为短参数的名称。单个冒号为-p后面会带上参数,参数可以是有空格分隔,也可以不分隔。

2. 如果使用-n10这样的短参数方式,其中n和10之间没有空格,则optstring中需要带双冒号:n::

3. 如果使用-c这样的短参数方式,并且没有参数,则optstring中直接写这个字母就行了:c

变量:

char *optarg:参数值

int optind:argv的索引值,第几个参数。

具体看详细列子:

#include <stdio.h>
#include <unistd.h>

int main (int argc, char *argv[])
{

    printf("argc:%d\r\n", argc);
    printf("argv:%s argv1:%s argv2:%s argv3:%s\r\n\r\n", argv[0], argv[1], argv[2], argv[3]);

    int oc;
    char ec;
    //通过while循环获取
    while((oc = getopt(argc, argv, "p:n::c")) != -1)
    {
        printf("optind:%d\r\n",optind); //参数索引值
        printf("optarg:%s\r\n",optarg); //参数值
        switch(oc)
        {
            case 'p': //参数p   optarg为参数值,-p 1024或者-p1024使用
                printf("Port:%s\n\n", optarg);
                break;
            case 'n': //参数n  需要-n10 这样使用
                printf("Thread Num:%s\n\n", optarg);
                break;
            case 'c': //参数c,需要-c使用,不用带参数
                printf("This is c\n\n");
                break;
            case '?': //如果设置了未定义的参数,则返回这边的错误信息
                ec = (char)optopt;
                printf("未定义的参数:%c\r\n", ec);
                break;

            case ':': //缺少选项
                printf("缺少选项参数\r\n");
                break;
        }
    }
   return 0;
}
运行命令行:

[admin@localhost ~]$ ./main -p1024 -n10 -c  -a
argc:5
argv:./main argv1:-p1024 argv2:-n10 argv3:-c

optind:2
optarg:1024
Port:1024

optind:3
optarg:10
Thread Num:10

optind:4
optarg:(null)
This is c

./main: invalid option -- 'a'
optind:5
optarg:(null)
未定义的参数:a


你可能感兴趣的:(Linux c 开发 - 命令行参数和getopt方法的使用细节)