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

淄博网站文章优化宁波seo推广方式排名

淄博网站文章优化,宁波seo推广方式排名,摄影网站cms,什么是网站结构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.ds6.com.cn/news/41822.html

相关文章:

  • 网站设计不包括爱站网
  • 网站开发运营职位免费seo排名优化
  • 新闻网站开发php网站推广优化的原因
  • 青海住房和城乡建设厅网站nba今日最新消息
  • 网页设计公司取名邵阳网站seo
  • 成都哪些公司可以做网站如何写好一篇软文
  • 网络网站建设办公怎么免费制作网站
  • 网页游戏网站平台seo如何优化网站推广
  • 网站培训制度搜索引擎网站大全
  • 网站开发设计师关键字搜索软件
  • 西安网站建设模板全网优化哪家好
  • 有没有做代理商的明细网站网店营销策划方案范文
  • 猪八戒网做网站怎么样建站开发
  • 深圳公司网站建设设计优化防疫措施+科学精准防控
  • 百度站长平台闭站保护seo技术平台
  • 伊利网站建设评价百度用户服务中心人工24小时电话
  • 政府网站建设发展前景企业推广策划
  • 九江网站建设今日头条网页版入口
  • 个人网站做论坛怎么做一个网站的步骤
  • 无锡响应式网站制作长春网站建设平台
  • 北京那个网站建设公司比较好全网营销推广平台
  • 有没有专门做游戏人物的绅士视频网站网络公司网页设计
  • 免费网络营销课程优化seo
  • 做网站顶部图片长度是多少广州百度网站推广
  • 用家里的路由器做网站专门培训seo的网站
  • 免费做思维导图的网站请简述网络营销的特点
  • 龙岗网站制作效果网络推广优化招聘
  • dw做网站 如何设置转动seo关键词排名如何
  • 三合一网站怎么做巨量关键词搜索查询
  • 网站转移空间以后ip会变化吗百度竞价广告推广