Writing Future Rotating Header Image

Posts Tagged ‘getopt’

getopt小问题

昨天写Shell,利用了GNU Lab下的getopt(int argc, char **argv, const char *options)及getopt_long()两个函数用来解析命令行参数。发现利用getopt解析不同的命令时其行为不正常,具体表现为访问非法内存地址。搜了一些例子,都发现仅用getopt来解析一次命令,没有类似我这样的用它来模拟一个Shell。用gdb分析了很久代码,都没有成果。
又仔细查了下getopt的文档,发现其通过一个全局变量 optind 来控制当前待解析的命令:即argv[optind]。当一个命令解析完之后,需要手动恢复optind的值,比如 optind = 1; 以后看文档需要仔细一些。
getopt和readline两个GNU提供的工具配合起来,可以比较方便的处理命令行相关特性,非常不错。