原创文章,转载请正确注明本文原始URL及作者。

介绍

写C/C++程序,我们常常需要把main函数的参数作为选项来传递。在linux中,解析选项有专门的函数可以用。

int getopt(int argc,char * const argv[ ],const char * optstring);

getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。
参数optstring 则代表你想要处理的选项字符串。
此函数处理的是短格式的选项,像"-a"这样只有一个字母的就是选项。
此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的一个字母。
如果选项字符串里的字母后接着冒号":",则表示此选项还有相关的参数,全域变量optarg 即会指向此额外参数。
如果getopt()发现有optstring以外的选项,则返回字符'?'并用全域变量optopt接收该未知选项,并且打印出错信息。如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
这里涉及到三个全局变量: optarg optopt opterr

演示一下

 #include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ch;
opterr = ;
while ((ch = getopt(argc,argv,"c:dls"))!=-)
{
switch(ch)
{
case 'c':
printf("config:%s\n",optarg);
break;
case 'd':
printf("debug mode\n");
break;
case 'l':
printf("print log\n");
break;
case 's':
printf("print status\n");
break;
default:
printf("ch=%c,unknown option :%c\n",ch,optopt);
}
}
printf("opterr=%d\n",opterr);
}

传参测试一下,运行结果如下:

test@localhost:~$ ./a.out -lsd -c hello.ini -AB
print log
print status
debug mode
config:hello.ini
ch=?,unknown option :A
ch=?,unknown option :B

 

我参考了这个资料,但其中有点错误,他把optopt说反了。

原创文章,转载请正确注明本文原始URL及作者。

解析main函数的命令行参数的更多相关文章

  1. C++main函数与命令行参数,退出程序

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...

  2. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  3. 第33课 main函数与命令行参数

    main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的. main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态. 如果程序时异常退出的, ...

  4. C++-main函数与命令行参数

    1.main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? //1 main(){ } //2 void main(){ } //3 ...

  5. main函数与命令行参数

    main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...

  6. Java的main函数(命令行传参)

    javac :编译命令 java  :执行命令

  7. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  8. Go 命令行参数,JSON 序列化与反序列化

    #### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化; 命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , ...

  9. getopt_long函数解析命令行参数

    转载:http://blog.csdn.net/hcx25909/article/details/7388750 每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用 ...

随机推荐

  1. react表单事件和取值

    常见的表单包括输入框,单选框,复选框,下拉框和多文本框,本次主要总结它们在react中如何取值. 输入框 在之前有说过输入框,可以先给input框的value绑定一个值,然后通过input框的改变事件 ...

  2. java学习——异常处理机制

    public class ExceptionDemo2 { public static void main(String[] args) { // TODO Auto-generated method ...

  3. 继续循环continue

    继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue; } ...

  4. java 泛型 checkcast

    我们来看一段代码 public class Test3 { public static void main(String args[]) throws IllegalAccessException, ...

  5. acl的基本知识点

    #ACL         acl number 3001 rule 1 deny udp destination-port eq 445 rule 2 deny tcp destination-por ...

  6. mysql默认8小时连接断开机制解决

    转载连接:http://www.myexception.cn/database/1639209.html 本文提供了对c3p0与DBCP连接池连接MySql数据库时, 8小时内无请求自动断开连接的解决 ...

  7. 阿里云OSS图片云存储测试上传

    在开发DEMO之前首先要确定 你开发OSS服务并获取了 accessKeyId和accessKeySecret final String key = MD5.Md5(DateFormat.format ...

  8. 保存chrome主题背景的图片

    chrome主题背景的图怎样可以保存下来? 在chrome地址栏中输入: chrome://theme/IDR_THEME_NTP_BACKGROUND?npebkpkiddfadallfhefpip ...

  9. linux达人养成计划

    一.命令基本格式: ls -1 详细列表 (ll) -h 人性化显示文件大小 -a 显示所有文件,包括隐藏文件 -d 查看目录属性 -i 显示iNode 二.文件处理命令 mkdir -p [目录名] ...

  10. Centos配置iptables开放ftp服务

    安装完vsftpd后,默认情况下,CentOS的防火墙是不开放ftp服务的,需要添加模块和开放21端口才能提供ftp访问.1.添加ip_conntrack_ftp 模块[root@hexuweb101 ...