我正在尝试编写带有一些选项的 ls 的限制版本。
但是,我一直坚持以一种干净的方式从我的参数中解析出我的选项的问题。
例如:
$ ls -l -t somefile anotherFile
$ ls somefile -lt anotherFile
具有相同的行为。
这给我带来了两个问题:
- 这让 argc 的使用变得有点困难。例如,我会考虑参数
ls -lt
和ls
都有 0 个参数(命令名称除外)但是 argc 计数-l
作为参数。
因此天真的实现:
if( argc == 1) {list all the contents of cwd}
不起作用。
是否有内置方法来获取选项以及选项计数,还是我必须推出自己的函数?
- 我必须考虑可以安排选项的所有不同方式,并注意不要将选项混淆为文件名或目录名。看起来最干净的解决方案是从一开始就将选项与文件参数分开。有没有一种惯用的方法可以做到这一点/是否有标准库调用可以做到这一点?
最佳答案
没有内置的参数解析帮助,但是getopt是参数解析的“标准”方法。
对于简单的应用程序,我有时会自己推出类似的东西:
int pos=0;
argc--;argv++;
while (argc > 0) {
if (*argv[0]=='-') {
switch ((*argv)[1]) {
case 'l': //-l argument
save_option_l(++argv);
argc--; //we consumed one name
break;
//... other -options here ...
default:
usage("unrecognized option %s", *argv);
}
}
else {
save_positional_argument(argv,pos++);
}
argv++;
argc--;
}
在这种情况下,我要求修饰符直接跟在标志之后。不要像您的第一个示例那样支持变量使用,除非有非常充分的理由这样做。
关于c - 在命令行程序中将选项与非选项参数分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50342378/