文档章节

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

AlexTuan
 AlexTuan
发布于 2016/01/30 22:50
字数 500
阅读 76
收藏 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
学习笔记——ldconfig

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

清风与你
2017/02/20
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
git学习笔记之1 Git 内部原理 - 底层命令和高层命令

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

mmh19891113
01/17
0
0
git学习笔记

git init 把当前目录编程Git可管理的仓库(添加了一个.git文件夹) echo "Git is a version control system." > readme.txt > 输入这句话保存到创建的readme.txt文件中 echo " Git is free sof......

boogoogle
2015/12/16
27
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部