C语言学习笔记之getopt()

在写程序的时候,我们经常需要用到命令行参数,所以今天我们看看C语言中的getopt()这个函数。

将C语言梳理一下,分布在以下10个章节中:

Linux-C成长之路(一):Linux下C编程概要

Linux-C成长之路(二):基本数据类型

Linux-C成长之路(三):基本IO函数操作

Linux-C成长之路(四):运算符

Linux-C成长之路(五):控制流

Linux-C成长之路(六):函数要义

Linux-C成长之路(七):数组与指针

Linux-C成长之路(八):存储类,动态内存

Linux-C成长之路(九):复合数据类型

Linux-C成长之路(十):其他高级议题

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

我们先看看下面这个

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

......

}

argc寄存了命令行参数个数(注意:包括程序名本身)


例如我们运行 ./ppyy.sh          ok              ko              pp            pe

|              |              |            |            |

对应的关系是: argv[0]    argv[1]      argv[2]        argv[3]    argv[4]

但是光这么用,我们是觉得不够的,记不记得我们在命令行经常使用ps -ef这样的命令,-ef就是命令行选项,它就像开关一样。

为了能具备命令行选项这样的功能,我们今天来看看getopt()这个函数。

首先,我们来看看一段程序<注:这段源程序来自head first>

#include <stdio.h>
#include <unistd.h>          //getopt()在unistd.h这个头文件中提供

int main(int argc,char *argv[]){
    char *delivery = "";
    int thick = 0;
    int count = 0;
    char ch;

while ((ch = getopt(argc,argv,"d:t")) != EOF ){
        switch (ch){
            case 'd':
                delivery = optarg;
                break;
            case 't':
                thick = 1;
                break;
            default:
                fprintf(stderr,"Unknown option:'%s'\n",optarg);

return 1;
        }

}

argc -= optind;
    argv += optind;

if (thick)
        puts("Thick crust.");

if (delivery[0])
        printf("To be delivered %s.\n",delivery);

puts("Ingredients:");
    for (count=0;count<argc;count++)
        puts(argv[count]);
   
    return 0;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6d395e8e70c7bdfd5861bea22f23d18c.html