看到一个程序里有getopt_long函数,没看懂,高手进来解释下

发布于 2022-10-15 08:18:07 字数 3509 浏览 29 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

檐上三寸雪 2022-10-22 08:18:07

回复 1# vdsvs

    这应该是一种常用的取参数方式,不过它这里支持长参数,我想你应该可以从usage中找到大概
你要让别人看的话,至少要把getopt_long的代码发出来
我猜是通过long_option数组匹配,例如程序名为app,
app -s arg1

app -serial arg1
效果一样,通过循环调用getopt_long取出参数,根据返回值判断当前存取在optarg中的参数
也就是说下面的switch中的case 's'后面就是处理serial后面的参数。

‘画卷フ 2022-10-22 08:18:07

LZ可以man getopt_long,也可以Google下它的用法。

橘亓 2022-10-22 08:18:07

回复  vdsvs

    这应该是一种常用的取参数方式,不过它这里支持长参数,我想你应该可以从usage中找到 ...
shuiyunhan2002 发表于 2011-04-28 22:04

    没有getopt_long 程序,

冷心人i 2022-10-22 08:18:07

LZ可以man getopt_long,也可以Google下它的用法。
whaaat 发表于 2011-04-29 10:15

查了,大体知道含义了,但不明白的是通过argc, argv传递进来参数后,也就执行一次getopt_long ,有可能把所有的参数都执行一边吗?程序里加了for(;来执行多次循环有什么用呢?

执笔绘流年 2022-10-22 08:18:07

回复 5# vdsvs
执行一次不能解析所有参数,要循环处理,判断getopt_long的返回值是否处理完。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文