Can I use getopt to process options in a certain order?

≯℡__Kan透↙ 提交于 2019-12-01 14:00:05

问题


I'm implementing a command line tool, and I need to be able to handle a bunch of options. Some of the options must terminate the program after they're done. For example I have options a, b and c. If a and b terminate after their done, and I give the command

./myprogram -bca [file] 

Is there a way to give "a" precedence in a situation like this using getopt()?

EDIT:

I solved this by running a switch on the options and set a flag if an option was selected. Then sent all the flags to a function that looks at the flags in order.


回答1:


There are two main ways to process the options read by getopt(). One is to do the action associated with an option as getopt() identifies it before reading the rest of the options; the other is to read all the options before doing any processing. (Programs not infrequently implement hybrid solutions; some options are acted on while parsing the arguments but others are simply noted and the actions taken after the arguments are processed.)

In your situation, it seems likely that you need to parse all the options before doing any processing. If both -a and -b terminate the program after doing the action, then they're mutually exclusive options and you should probably diagnose that as an erroneous invocation of your program. You will need to decide whether it is OK to allow -c as well as either -a or -b.

Quite often, you will have pairs of options that are required to work together, or you need to know whether one, the other, or both have been specified before deciding what to do. Another issue to consider is what it means if an option is repeated on the command line.




回答2:


There is no way to make getopt itself handle this. The easiest way would be to create a flags bitmap, as @tfahl suggested.



来源:https://stackoverflow.com/questions/26473642/can-i-use-getopt-to-process-options-in-a-certain-order

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!