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

免费做公众号的网站无代码开发原理

免费做公众号的网站,无代码开发原理,洛阳外贸网站推广,苏州和城乡建设局网站getopt函数、optind等变量使用详解 最近在学习《Unix网络编程》vol2时,发现书中例子经常使用一个命令行解析getopt函数,因为函数声明比较特别,根据自己摸索,遂总结出使用方法。 1. getopt函数的声明 该函数是由Unix标准库提供的…

getopt函数、optind等变量使用详解

最近在学习《Unix网络编程》vol2时,发现书中例子经常使用一个命令行解析getopt函数,因为函数声明比较特别,根据自己摸索,遂总结出使用方法。

1. getopt函数的声明

该函数是由Unix标准库提供的函数,查看命令man 3 getopt

#include <unistd.h>int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;
extern int optind, opterr, optopt;

getopt函数的参数:

  • 参数argc和argv:通常是从main的参数直接传递而来,argc是参数的数量,argv是一个常量字符串数组的地址。
  • 参数optstring:一个包含正确选项字符的字符串,如果一个字符后面有冒号,那么这个选项在传递参数时就需要跟着一个参数。

外部变量:

  • char *optarg:如果有参数,则包含当前选项参数字符串
  • int optind:argv的当前索引值。当getopt函数在while循环中使用时,剩下的字符串为操作数,下标从optind到argc-1。
  • int opterr:这个变量非零时,getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。
  • int optopt:当发现无效选项字符之时,getopt()函数或返回 \’ ? \’ 字符,或返回字符 \’ : \’ ,并且optopt包含了所发现的无效选项字符。

根据下面的程序理解这四个参数

2. getopt函数的使用

man 3 getopt给出了该函数的例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>int main(int argc, char *argv[])
{int flags = 0, opt;int nsecs = 0, tfnd = 0;while((opt = getopt(argc, argv, "nt:")) != -1) {switch (opt) {case 'n':flags = 1;break;case 't':nsecs = atoi(optarg);tfnd = 1;break;default:printf("optopt = %c\n", (char)optopt);printf("opterr = %d\n", opterr);fprintf(stderr, "usage: %s [-t nsecs] [-n] name\n", argv[0]);exit(EXIT_FAILURE);} }printf("flags = %d; tfnd = %d; nsecs = %d; optind = %d\n", flags, tfnd, nsecs, optind);printf("optind = %d\n", optind);printf("argc = %d\n", argc);
#if 1 if(optind >= argc) {fprintf(stderr, "Expected argument after options\n"); exit(1);}
#endifprintf("name argument = %s\n", argv[optind]);/* Other code omitted */return 0;
}
  • getopt函数的第三个字符串参数 “nt:”:在man page中这样解释:-n, with no associated value; and -t val, which expects an associated value。中文意思为:-n 不用一个关联值;-t 需要有一个关联的value参数

运行结果:

➜  test ./a.out -a  name    //首先 -a 是一个非法的选项
./a.out: invalid option -- 'a'  //输出错误信息,因为非法选项
optind = 2  //此时argv[optind]是我们的操作数,也就是我们传递给主函数的参数
optopt = a  //当发现无效项字符时,optopt会包含该字符,正如我们传递的‘a’这个无效项。
opterr = 1  //opterr变量非零,getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。
usage: ./a.out [-t nsecs] [-n] name

再次运行:

➜  test ./a.out -t        //根据getopt函数的第三个参数,因为‘t’字符后有‘:’冒号,因此在‘-t’选项后需要跟随一个参数。因此此次运行的错误为“缺少参数”,如下提示:
./a.out: option requires an argument -- 't' //输出了错误信息,因为“缺少参数”
optind = 2  //argv[optind]为空,因为此次运行没有传递参数
optopt = t  //当发现无效项字符时,optopt会包含该字符,正如我们传递的‘t’缺少参数的选项。
opterr = 1  //opterr变量非零,getopt()函数为“无效选项”和“缺少参数“选项,并输出其错误信息。
usage: ./a.out [-t nsecs] [-n] name

再次运行:

➜  test ./a.out -t 123 -n     //此时,根据字符串”-nt:“应该得知,-t 后应加参数,-n不用加
flags = 1; tfnd = 1; nsecs = 123; optind = 4    //在switch语句中将flags=1,tfnd=1,因为optarg变量保存这当前选项参数的字符串,因此此时optarg保存的是‘-t’参数的参数并用atoi函数转称整数,因此nsecs=123。
optind = 4  //argv[optind]为空,因为没有向主函数传递参数
argc = 4    //一共四个字符串
Expected argument after options //该程序希望我们至少传递一个参数,因此在if语句中退出。

再次运行:

➜  test ./a.out -t 123 -n hello //‘-t’后加参数,‘-n’不用加,向main函数传递参数叫hello
flags = 1; tfnd = 1; nsecs = 123; optind = 4
optind = 4  //argv[optind] = ”hello“
argc = 5    //五个字符串
name argument = hello   //打印参数name argument= hello

其实可以传递多个参数(如果需要,因为此函数只打印第一个参数),例如:

➜  test ./a.out -t 123 -n hello world hello C
optind = 3
optind = 4
flags = 1; tfnd = 1; nsecs = 123; optind = 4
optind = 4
argc = 8
name argument = hello   
http://www.yayakq.cn/news/559296/

相关文章:

  • 网站改版seo方案做网站需要看的书
  • 自己做的网站能被别人看到吗电子商务作业做网站
  • 美食网站建设的背景浅析小型企业网站的建设
  • 官方网站重要性光明新区住房和建设局网站
  • 优秀北京网站建设网站建设哪家稳妥
  • 手机网站 asp建设银行 嘉定 网站
  • 长春建站模板展示南京做网站的公司有哪些
  • 有没有免费做网站的google 网站推广
  • 北京网站设计浩森宇特wordpress win调试
  • 成都搭建企业网站appcms程序怎么做网站
  • 辽宁省建设工程信息网官网新网站入口房产类网站制作商
  • 网站建设项目组织图大丰网站设计公司
  • 太原自助建站常宁网站制作
  • 怎样做销售产品网站网站首页被降权
  • 广东佛山网站建设h5招聘模板免费
  • 江苏品牌网站建设电子商务网站建设与管理试卷
  • 深圳网页设计制作网站营销推广ppt
  • 网页制作素材网站wordpress修改摘要字数
  • 寿县网站建设响应式网站建设流程
  • 免费建网站可以找哪家英文网站网站弹出窗口js
  • 忻州企业网站建设怎么做代理
  • 外贸网站外包蚌埠网站制作公司费用
  • 网站做什么内容网站策划与建设阶段
  • 局域网怎么做网站ps在线图片编辑
  • 网站备案对应的ip地址php装修门户网站源码
  • wordpress网站数据备份网站查询进入
  • 网站建设手机源码自己做网站成本
  • 怎么用云主机做网站软件实施工程师
  • 网站建设应用技术wordpress数据库用户名密码忘记
  • 网站建设活动策划方案商城版手机网站制作