看到一个程序里有getopt_long函数,没看懂,高手进来解释下
int option_index = 0;
/** Options for getopt */
static struct option long_options[] = {
{"serial", required_argument, NULL, 's'},
{"operation", required_argument, NULL, 'o'},
{"config", required_argument, NULL, 'c'},
{"num", required_argument, NULL, 'n'},
{"data", required_argument, NULL, 'd'},
{"mode", required_argument, NULL, 'm'},
{"help", no_argument, NULL, 'h'},
{NULL, 0, NULL, 0}
};
int c = getopt_long (argc, argv, "s:c:n:d:m:h",
long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 's':
strcpy(_devname,optarg);
break;
case 'o':
strcpy(temp,optarg);
if(!strcmp(temp,"r")
_oper = 'r';
else
_oper = 'w';
break;
case 'c':
---------------------------------------------------------
上面我是复制的一部分程序,没看懂怎么完成设置参数的,那位高手给解释下,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
回复 1# vdsvs
这应该是一种常用的取参数方式,不过它这里支持长参数,我想你应该可以从usage中找到大概
你要让别人看的话,至少要把getopt_long的代码发出来
我猜是通过long_option数组匹配,例如程序名为app,
app -s arg1
与
app -serial arg1
效果一样,通过循环调用getopt_long取出参数,根据返回值判断当前存取在optarg中的参数
也就是说下面的switch中的case 's'后面就是处理serial后面的参数。
LZ可以man getopt_long,也可以Google下它的用法。
没有getopt_long 程序,
查了,大体知道含义了,但不明白的是通过argc, argv传递进来参数后,也就执行一次getopt_long ,有可能把所有的参数都执行一边吗?程序里加了for(;来执行多次循环有什么用呢?
回复 5# vdsvs
执行一次不能解析所有参数,要循环处理,判断getopt_long的返回值是否处理完。