Getopt - 带有必填项

时间:2016-10-31 19:16:39

标签: c getopt

我要做一个名为的程序:

>./program [-p] [-h] [-n <number>] <file>

我得到了我的getopt工作,但我需要以某种方式获取文件,我尝试使用optind,但<file>可以在任何标志之前给出。 可能的电话是:

>./program bomber.txt
>./program bomber.txt -n 2 -p
>./program -h bomber.txt -n 4
>./program -p -n 3 bomber.txt

1 个答案:

答案 0 :(得分:1)

您可以在https://linux.die.net/man/3/getopt

找到getopt的文档

您问题的实际答案在以下段落中

  

默认情况下,getopt()会在扫描时置换argv的内容,以便最终所有非选择都在最后。还实现了另外两种模式。如果optstring的第一个字符是&#39; +&#39;或者设置环境变量POSIXLY_CORRECT,然后一旦遇到nonoption参数,选项处理就会停止。如果optstring的第一个字符是&#39; - &#39;,那么每个非选择argv-element都被处理,好像它是带有字符代码1的选项的参数。(这是由编写的程序使用的任意顺序的选项和其他argv元素,关心两者的排序。)特殊论点&#34; - &#34;无论扫描模式如何,强制选项扫描结束。

关键是getopt置换命令行。完成对选项的解析后,argv[optind]将引用必需的文件名。

如果命令行中没有文件名,optind将等于argc