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

来源:互联网 发布:制作手持身份证软件 编辑:程序博客网 时间:2024/06/08 09:04

命令行参数

在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 -cargc:4argv:./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  -aargc:5argv:./main argv1:-p1024 argv2:-n10 argv3:-coptind:2optarg:1024Port:1024optind:3optarg:10Thread Num:10optind:4optarg:(null)This is c./main: invalid option -- 'a'optind:5optarg:(null)未定义的参数:a


0 0
原创粉丝点击