文档章节

Head First C学习笔记 chapter3 由库代劳 命令行选项

AlexTuan
 AlexTuan
发布于 2016/01/30 22:50
字数 500
阅读 79
收藏 5

1.很多程序都有命令行选项,如gcc -c

     使用库函数getopt(),每次调用,都会返回命令行中下一个参数。

     getopt(argc,argv,”o:p:t:”);

     argc和argv从命令行接收,第三个参数代表可以接受的选项,:表示,该选项后要接收一个参数。

     要使用它,需要包含unistd.h头文件,它不属于c标准库,而是POSIX库的成员。

2.例程

#include<stdio.h>
#include<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;
        }
    /*option index,I guess
     */
    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;
}

     2.1 getopt的调用

         

ch=getopt(argc,argv,”d:t”)

          读取一个-d或者-t选项,及-d的参数,如果是其他的字母,则不合法,输出错误到stderr并退出。

delivery = optarg;
//optarg表示读取到的选项的参数。
argc -= optind;
argv += optind;

     optarg表示读取到的选项的参数。           

    这两句代码感觉有点厉害……将argc的长度减少optind个,optind,从字面意思上看是选项索引,随着while循环增加。同时将argv这个指针数组的地址,偏移optind个成员(指针)长度。

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

          根据偏移后的位置和剩余的参数数量,将内容输出。 

3.其他要点

     可以合并两个选项,如 -td now,事实上我们也常这样做,如ps -asf

     可以改变选项顺序

     如果想输入负数,可以用—(两个连字符)隔开参数和选项,如set_temprature -c — -4,getopt遇到—,就会停止读取选项,程序会把后面的内容当成普通的命令行参数。 


© 著作权归作者所有

共有 人打赏支持
AlexTuan
粉丝 3
博文 27
码字总数 17966
作品 0
程序员
私信 提问
makefile文件的一些解读

这篇文章算是一个学习的笔记吧,在很多的程序构建过程中的一些东西 gcc编程的四个步骤 命令格式如下 其中[目标文件]可以缺省,Gcc默认生成可执行的文件名为:要编译的文件.out 例子: 编译的...

hit2015spring
2017/05/28
0
0
R 学习笔记《二》 R语言初学者指南

1 录入少量数据。 打开Tinn R输入 然后粘贴到R控制台 Wing1 <- 59 Wing2 <- 55 Wing3 <- 53.5 Wing4 <- 55 Wing5 <- 52.5 其实就是赋值运算,左边表示变量,<-符号也可以用=替换。 查看输入的...

varlardoha
2013/01/16
0
3
学习笔记——ldconfig

ldconfig命令的作用 ldconfig是一个动态链接管理库的命令,其目的是为了让动态链接库为系统所共享。 ldd:查看程序依赖库 用途:默认搜寻/lib和/usr/lib,以及动态库配置文件/etc/ld.so.conf...

清风与你
2017/02/20
0
0
git学习笔记之1 Git 内部原理 - 底层命令和高层命令

底层命令 (Plumbing) 和高层命令 (Porcelain) 本书讲解了使用 checkout, branch, remote 等共约 30 个 Git 命令。然而由于 Git 一开始被设计成供 VCS 使用的工具集而不是一整套用户友好的 VC...

mmh19891113
2018/01/17
0
0
git 安装使用笔记

Git安装以及使用Git 管理个人文档 1.1 Git 安装 Git的最新版本可以在http://git-scm.com/ 下载 ,它是基于命令行操作的,网上也有第三方开发的相应GUI可供下载,因为我比较喜欢命令行操作,所...

鉴客
2011/08/09
11.4K
10

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
43分钟前
0
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部