当前位置:  技术问答>linux和unix

新手疑问:getopt_long()重入问题

    来源: 互联网  发布时间:2016-05-12

    本文导语:    大家好。   我在开发一个命令行处理工具,其中使用getopt_long()函数来处理用户的多选项输入,但是发现如果输入一条命令比较长的时候,第一次可以执行成功,但是第二次就不能执行成功,第三次可以成功,第...

  大家好。
  我在开发一个命令行处理工具,其中使用getopt_long()函数来处理用户的多选项输入,但是发现如果输入一条命令比较长的时候,第一次可以执行成功,但是第二次就不能执行成功,第三次可以成功,第四次又不能,这样循环往复。具体现象如下:
> lanconfig --lan_ipaddr 192.168.10.209 (用户输入的命令)
done!  (这是执行成功后我自己的调试信息)
> lanconfig --lan_ipaddr 192.168.10.209  (再执行一遍同样的命令)
lanconfig: unrecognized option '--09'  (这一行是getopt_long()输出的错误信息)

我不明白为什么该函数在第二次调用时,居然找到一个"--09"的选项。我怀疑是我用了某个全局变量但是没有重新初始化导致的,后来在社区找到一个05年的帖,有类似的问题,这位大侠是用下面的语句清理了几个变量:
              __getopt_initialized = 0;  //如果是1的话是不会获取optstring   
            last_nonopt = 1;   //后一个参数把他重置回第一个   
              first_nonopt = 1;   //前一个参数把他重置回第一个   
              optind = 1;   //初始argv[],可以为0,不过程序是不读取argv[0] 
但是除了最后的optind是全局变量之外,其他三个参数都是getopt.c内部的静态变量,外部引用都会报“引用了没有定义的变量”错误,而我自己的程序中在调用前的确是将optind重置为1了。 

开发的系统环境是Fadora 7,GCC版本是3.4.6,程序的主流程如下:
int main()
{
    while(1)
    {
        等待用户输入命令;
        分析输入命令到argc,argv变量中;
        optind = 1;
        result = getopt_long(argc, argv, ...);
        根据result处理;
    }
}
程序对照一些范例做过自检,流程上没有问题,因为在命令不太长的时候可以正确执行,并且optstring、option结构都没有错。

希望各位能给我一些指点或者建议,谢谢大家。

|
看了下你的现象。感觉不是getopt_long函数的问题。因为现象太过明显,如果是getopt_long函数的bug的话,早就报出来解决掉了。
是否你使用了过多的全局变量,或者有越界操作?或者,是否你的变量有需要初始化,但是你没做?

等下我做个例子,把lanconfig --lan_ipaddr 192.168.10.209  解析一下。稍等。大概半小时。

|
好像不能这么用getopt_long吧。
从来就没有想过可以这么使用getopt_long

|
没注意过,明天试一下

|
帮顶

|
应该是这么写吧
int c;
...
while ((c = getopt(argc, argv, ":af:hv")) != -1) {
根据result处理;
...
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 新手问题:中文问题等
  • 新手问题,关于liux安装启动的问题。
  • 新手有关linux的问题!
  • (新手问题)关于QT的问题
  • 一个蛋疼的问题,我是新手
  • 新手问题:RH怎么退回字符界面? 急!!!!
  • 新手问SCO UNIX安装问题
  • 新手学linux,关于vmware tools的问题。
  • 新手求教:关于ftp命令的问题,请大家帮帮忙
  • Java新手上路之问题
  • 新手,关于Gaim的问题,在线等
  • 新手问的小问题
  • linux新手问题
  • 新手学习linux的问题
  • 新手,菜鸟问题
  • 新手来请教一个关于IDE的问题
  • linux 分区 储存问题,纠结,想不明白了(新手)
  • 大家好,我是linux新手,有些问题请教
  • 新手小问题,望各位高手指导!!!!
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手急求~~~~~~~~~~~~~~~~~~~
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 新手请教啦~~能不能帮忙推荐几本书
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3