请教个有关getopt()

cplusplus_tmp 2013-09-04 11:03:38
如下说明:
1、命令行参数
命令行程序设计的首要任务是解析命令行参数,GUI派的程序员很少关心这个。这里,对参数采用了一种比较通俗的定义:命令行上除命令名之外的字符串。参数由多项构成,项与项之间用空白符彼此隔开。
参数进一步分为选项操作数。选项用于修改程序的默认行为或为程序提供信息,比较老的约定是以短划线开头。选项后可以跟随一些参数,称为选项参数。剩下的就是操作数了。
2、POSIX约定 POSIX表示可移植操作系统接口: Portable Operating System Interface,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 标准。

下面是POSIX标准中关于程序名、参数的约定:

01.程序名不宜少于2个字符且不多于9个字符
02.程序名应只包含小写字母和阿拉伯数字
03.选项名应该是单字符或单数字,且以短横‘-’为前
04.多个不需要选项参数的选项,可以合并。(譬如:foo -a -b -c ---->foo -abc)
05.选项与其参数之间用空白符隔开
06.选项参数不可选
07.若选项参数有多值,要将其并为一个字串传进来。譬如:myprog -u "arnold,joe,jane"。这种情况下,需要自己解决这些参数的分离问题。
08.选项应该在操作数出现之前出现
09.特殊参数‘--'指明所有参数都结束了,其后任何参数都认为是操作数。
10.选项如何排列没有什么关系,但对互相排斥的选项,如果一个选项的操作结果覆盖其他选项的操作结果时,最后一个选项起作用;如果选项重复,则顺序处理。
11.允许操作数的顺序影响程序行为,但需要作文档说明。
12.读写指定文件的程序应该将单个参数'-'作为有意义的标准输入或输出来对待。

3、GNU长选项

GNU鼓励程序员使用--help、--verbose等形式的长选项。这些选项不仅不与POSIX约定冲突,而且容易记忆,另外也提供了在所有GNU工具之间保持一致性的机会。GNU长选项有自己的约定:

13.对于已经遵循POSIX约定的GNU程序,每个短选项都有一个对应的长选项。
14.额外针对GNU的长选项不需要对应的短选项,仅仅推荐要有。
15.长选项可以缩写成保持惟一性的最短的字串。
16.选项参数与长选项之间或通过空白字符活通过一个'='来分隔。
17.选项参数是可选的(只对短选项有效)。
18.长选项允许以一个短横线为前缀。


其中,请问,
1、什么叫操作数?和选项有什么关系联系?
2、06.什么意思?举例说明
3、12.什么意思?举例说明
...全文
236 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
notpurec 2013-09-06
  • 打赏
  • 举报
回复
http://www.cs.virginia.edu/~lcc-win32/ http://apr.apache.org/docs/apr/1.2/group__apr__getopt.html http://www.gtk.org/ http://www.boost.org/doc/libs/1_54_0/doc/html/program_options.html http://www.codeproject.com/Articles/1940/XGetopt-A-Unix-compatible-getopt-for-MFC-and-Win32 http://bytes.com/topic/c/answers/733516-getopt-under-windows http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html http://linux.chinaitlab.com/c/809314.html http://linux.chinaunix.net/techdoc/system/2006/06/08/934020.shtml http://pic.dhe.ibm.com/infocenter/director/pubs/index.jsp?topic=%2Fcom.ibm.esa.director.help%2Fservice_and_support_cli_syntax_diagram_conventions.html&lang%3Dzh_CN http://blog.csdn.net/johnpher/article/details/6957934 http://cpp-prog.com/2009/1102/172.html http://www.itzk.com/b/1104/580184.shtml http://www.codeproject.com/Articles/1940/XGetopt-A-Unix-compatible-getopt-for-MFC-and-Win32 http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/attributes/_posix.html http://www.startos.com/linux/tips/2010121515236.html http://blog.csdn.net/huangxiaohu_coder/article/details/7475156 http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html http://www.gnu.org/prep/standards/html_node/Option-Table.html#Option-Table http://www.gnu.org/software/libc/manual/html_node/Getopt.html#Getopt http://www.codeproject.com/Articles/157001/Full-getopt-Port-for-Unicode-and-Multibyte-Microso http://www.wcode.net/plus/view.php?aid=1541069 http://www.cppblog.com/flyonok/archive/2010/09/04/125884.html http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html http://bbs.csdn.net/topics/390580439 http://mih.voxindeserto.de/argvparser.html
cplusplus_tmp 2013-09-05
  • 打赏
  • 举报
回复
现在,剩下6、17不得其解,请高人指点一二
cplusplus_tmp 2013-09-05
  • 打赏
  • 举报
回复
cplusplus_tmp 2013-09-05
  • 打赏
  • 举报
回复
真是一地鸡毛啊!就是没有专门论述!
notpurec 2013-09-05
  • 打赏
  • 举报
回复
有关楼主的6,在http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... ... Guideline 7: Option-arguments should not be optional. ... ... 注:看此文,必先预研文中三个概念词 option, option-argument, operand
notpurec 2013-09-05
  • 打赏
  • 举报
回复
有关GNU extension,请看 http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html 行文组织不是很系统,聊胜于无吧
notpurec 2013-09-05
  • 打赏
  • 举报
回复
有关POSIX.1-2008的部分,在 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html 有e文介绍。 中文翻译的玩意,断章取义,装模作样,全拓麻的狗吃生米不消化,狗屁哒哒不知所言为什物! 看e文版吧!
Carl_CCC 2013-09-04
  • 打赏
  • 举报
回复
操作数就是非选项和非选项参数参数了,cat abc.txt 这里的abc.txt就是操作数了。
06表示选项之后的选项参数是普通的,不可以是可选参数, -a 后面如果要带参数不能带-b这类,只能是abc
因为会把-b当作另外一个可选项。
12当使用文件作为操作数的时候- 表示成标准输入或输出,比如cat - 按理应该带文件,但没有文件,这个时候-表示从标准输入stdin作为操作数
cplusplus_tmp 2013-09-04
  • 打赏
  • 举报
回复
呼叫版主把8楼这个王八蛋u011973105的垃圾贴删了!
notpurec 2013-09-04
  • 打赏
  • 举报
回复
参考e文资料吧:http://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Options.html#Getopt-Long-Options 其中有一段说明了18,亦即getopt_long_only(...),如下: — Function: int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *indexptr) The getopt_long_only function is equivalent to the getopt_long function but it allows to specify the user of the application to pass long options with only ‘-’ instead of ‘--’. The ‘--’ prefix is still recognized but instead of looking through the short options if a ‘-’ is seen it is first tried whether this parameter names a long option. If not, it is parsed as a short option. Assuming getopt_long_only is used starting an application with app -foo the getopt_long_only will first look for a long option named ‘foo’. If this is not found, the short options ‘f’, ‘o’, and again ‘o’ are recognized.
Carl_CCC 2013-09-04
  • 打赏
  • 举报
回复
18条,不会啊,长选项不会和短选项混淆的,长选项不是一个字母,当然一个字母的时候是唯一的。
cplusplus_tmp 2013-09-04
  • 打赏
  • 举报
回复
还得有请1、4楼的行家帮我回答2、3楼的疑问,谢谢
mymtom 2013-09-04
  • 打赏
  • 举报
回复
12.读写指定文件的程序应该将单个参数'-'作为有意义的标准输入或输出来对待。 这个可以用一个例子说明 gzip -cd foo.tar.gz | tar -xvf - 表示参数选项f的参数是标准输入。
cplusplus_tmp 2013-09-04
  • 打赏
  • 举报
回复
还有18长选项允许以一个短横线为前缀,这不乱套了吗?怎么区分“短选项的选项参数”和“长选项”?
cplusplus_tmp 2013-09-04
  • 打赏
  • 举报
回复
清楚了,06和17是不是有关系?
二楼关于06的解析我有疑惑

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧