文档章节

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

AlexTuan
 AlexTuan
发布于 2016/01/30 22:50
字数 500
阅读 76
收藏 5
点赞 1
评论 0

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

Git学习笔记

Git 初始化 git config Git配置文件采用的是INI文件格式,git config用于读取和更改INI配置文件的内容 例:初始化姓名和邮件地址 git config --system user.name "codenot"git config --syst...

城门虾米 ⋅ 2013/07/02 ⋅ 0

学习笔记——ldconfig

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

清风与你 ⋅ 2017/02/20 ⋅ 0

git学习笔记之1 Git 内部原理 - 底层命令和高层命令

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

mmh19891113 ⋅ 01/17 ⋅ 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 ⋅ 0

git学习笔记整理

安装Git 从http://msysgit.github.io/下载,然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 之后所有命令...

萌神明明 ⋅ 2014/04/11 ⋅ 2

git 安装使用笔记

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

鉴客 ⋅ 2011/08/09 ⋅ 10

命令行神器 Click 简明笔记

Click Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 re...

funhacks ⋅ 2017/11/29 ⋅ 0

Boost库的命名规则

本博客(http://blog.csdn.net/livelylittlefish )贴出作 者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Boost库的命名规则 例如: Win32平台 libboostfilesystem-v...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Linux学习笔记

命令 --help 命令的简单帮助 man == 命令帮助 help == 命令的帮助(bash的内置命令) ls == 查看目录列表 -l(long) -d(directory) mkdir == make directory 作用是创建目录, 例如: mkdi...

许大树 ⋅ 2017/11/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 16分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 25分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 28分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 28分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 34分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 35分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 39分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 45分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 48分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 52分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部