当前位置: 首页 > news >正文

珠海 旅游 网站建设建设部资质网站

珠海 旅游 网站建设,建设部资质网站,wordpress 一些源代码,免费域名freenom平时在写程序时常常需要对命令行参数进行处理#xff0c;当命令行参数个数较多时#xff0c;如果按照顺序一个一个定义参数含义很容易造成混乱#xff0c;而且如果程序只按顺序处理参数的话#xff0c;一些“可选参数”的功能将很难实现。 在Linux中#xff0c;我们可以使…平时在写程序时常常需要对命令行参数进行处理当命令行参数个数较多时如果按照顺序一个一个定义参数含义很容易造成混乱而且如果程序只按顺序处理参数的话一些“可选参数”的功能将很难实现。 在Linux中我们可以使用getopt、getopt_long、getopt_long_only来对这个问题进行处理。#include unistd.h int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt; #include getopt.h int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex); int getopt_long_only(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);从最简单的getopt讲起getopt函数的前两个参数就是main函数的argc和argv这两者直接传入即可要考虑的就只剩下第三个参数。 optstring的格式举例说明比较方便例如char *optstring abcd:; 上面这个optstring在传入之后getopt函数将依次检查命令行是否指定了 -a -b -c及 -d这需要多次调用getopt函数直到其返回-1当检查到上面某一个参数被指定时函数会返回被指定的参数名称即该字母 最后一个参数d后面带有冒号: 表示参数d是可以指定值的如 -d 100 或 -d user。 optind表示的是下一个将被处理到的参数在argv中的下标值。 如果指定opterr 0的话在getopt、getopt_long、getopt_long_only遇到错误将不会输出错误信息到标准输出流。#include unistd.h#include stdlib.h#include stdio.h int main(int argc, char *argv[]){ int opt; char *optstring a:b:c:d; while ((opt getopt(argc, argv, optstring)) ! -1){ printf(opt %c\n, opt); printf(optarg %s\n, optarg); printf(optind %d\n, optind); printf(argv[optind - 1] %s\n\n, argv[optind - 1]);} return 0;} 编译上述程序并运行有如下结果 casheyubuntu:~/Desktop/getopt$ ./test_getopt -a 100 -b 200 -c admin -dopt aoptarg 100optind 3argv[optind - 1] 100 opt boptarg 200optind 5argv[optind - 1] 200 opt coptarg adminoptind 7argv[optind - 1] admin opt doptarg (null)optind 8argv[optind - 1] -d下面来讲getopt_long函数getopt_long函数包含了getopt函数的功能并且还可以指定“长参数”或者说长选项与getopt函数对比getopt_long比其多了两个参数int getopt(int argc, char * const argv[],                  const char *optstring);int getopt_long(int argc, char * const argv[],                  const char *optstring,                  const struct option *longopts, int *longindex); 在这里longopts指向的是一个由option结构体组成的数组那个数组的每个元素指明了一个“长参数”即形如--name的参数名称和性质struct option {               const char *name;               int         has_arg;               int        *flag;               int         val;           };       name  是参数的名称       has_arg 指明是否带参数值其数值可选              no_argument (即 0) 表明这个长参数不带参数即不带数值如--name              required_argument (即 1) 表明这个长参数必须带参数即必须带数值如--name Bob            optional_argument即2表明这个长参数后面带的参数是可选的即--name和--name Bob均可       flag   当这个指针为空的时候函数直接将val的数值从getopt_long的返回值返回出去当它非空时val的值会被赋到flag指向的整型数中而函数返回值为0       val    用于指定函数找到该选项时的返回值或者当flag非空时指定flag指向的数据的值。 另一个参数longindex如果longindex非空它指向的变量将记录当前找到参数符合longopts里的第几个元素的描述即是longopts的下标值。#include unistd.h#include stdlib.h#include stdio.h#include getopt.h intmain(int argc, char **argv){ int opt; int digit_optind 0; int option_index 0; char *optstring a:b:c:d; static struct option long_options[] {{reqarg, required_argument, NULL, r},{noarg, no_argument, NULL, n},{optarg, optional_argument, NULL, o},{0, 0, 0, 0}}; while ( (opt getopt_long(argc, argv, optstring, long_options, option_index)) ! -1){ printf(opt %c\n, opt); printf(optarg %s\n, optarg); printf(optind %d\n, optind); printf(argv[optind - 1] %s\n, argv[optind - 1]); printf(option_index %d\n, option_index);} return 0;}编译运行以上程序并运行可以得到以下结果casheyubuntu:~/Desktop/getopt$ ./test_getopt_long -a 100 --reqarg 100 --nonargopt aoptarg 100optind 3argv[optind - 1] 100option_index 0opt roptarg 100optind 5argv[optind - 1] 100option_index 0./test_getopt_long: unrecognized option --nonargopt ?optarg (null)optind 6argv[optind - 1] --nonargoption_index 0当所给的参数存在问题时opt即函数返回值是?如 casheyubuntu:~/Desktop/getopt$ ./test_getopt_long -a./test_getopt_long: option requires an argument -- aopt ?optarg (null)optind 2argv[optind - 1] -aoption_index 0casheyubuntu:~/Desktop/getopt$ ./test_getopt_long --reqarg./test_getopt_long: option --reqarg requires an argumentopt ?optarg (null)optind 2argv[optind - 1] --reqarg最后说说getopt_long_only函数它与getopt_long函数使用相同的参数表在功能上基本一致只是getopt_long只将--name当作长参数但getopt_long_only会将--name和-name两种选项都当作长参数来匹配。在getopt_long在遇到-name时会拆解成-n -a -m -e到optstring中进行匹配而getopt_long_only只在-name不能在longopts中匹配时才将其拆解成-n -a -m -e这样的参数到optstring中进行匹配。
http://www.pierceye.com/news/12973/

相关文章:

  • 中小企业网站建设如何网站建设经费管理
  • 网站建设网上商城心得体会怎么在百度上建立自己的网页
  • 网站分页符素材html标签 wordpress
  • 互联网做视频网站需要许可证吗绵阳网站建设制作
  • 黄骅港属于哪个省哪个市网站为什么要seo
  • 宁波网站推广公司有哪些网站服务器规划 用户数
  • 沈阳网站建设dnglzx做网站子页
  • 搜英文关键词网站竹子建站seo设置怎么做
  • 宝塔面板做网站绑定域名手机版网站html5源码
  • 做网站如何连数据库广东东莞直播基地
  • 绍兴网站建设解决方案网页制作多少分
  • 遂溪网站建设公司深圳网站建设 设计科技有限公司
  • 更改网站描述新公司简介范文
  • 网站建设需要注意什么哪些微信里的小程序找不到了
  • 常州网站建设 光龙用html表格做的网站
  • 深圳网站平台哪家强网站 宣传方案
  • 什么网站从做系统上海排名优化推广工具
  • 自学网站建设看哪本书宁波网站建设设计至诚服务
  • 网站开发技术书籍用asp.net做购物车网站
  • 网站上图片不能下载 该怎么做找网站做q币
  • 电商网站规划的开发背景网站建设维护去哪里学
  • 网站如何做二级域名东莞市有几个区
  • 网站的内链建设wordpress 播放视频
  • 微网站开发提供的服务器可以做网站的路由器
  • php电子商务网站模板全国网站开发公司
  • 建站网站主题设置不能点学校网站开发需求
  • 网站设计 品牌设计做下载网站赚钱吗
  • 怎么知道网站有没有备案推荐微网站建设
  • 贵州建设监理协会网站网站筛选功能
  • 网站开发常用语言总结黑龙江网站建设巨耀网络