getopt

说明

以下内容参看man手册编写。



函数原型

#include <unistd.h>

extern char *optarg;
extern int optind, opterr, optopt;

int getopt(int argc, char * const argv[],  const char *optstring);


介绍

全局变量optarg用来指向选项后面跟着的参数,若选项后面没有参数,则为null。

全局变量optind用来指示下一个将要处理的参数选项的索引值,系统将其初始化为1(不包括可执行程序本身)。调用者可以手动将其置1,使重头检测参数。

全局变量optopt用来存储非合法的选项字符(对应整数),合法情况下,值为0。

全局变量opterr非0情况下,如遇到需要指定参数却没有的,或遇到非合法选项字符的, 系统会默认打印相应的错误信息到stderr。若不想打印该信息,可通过全局变量opterr置0来实现,或者在optstring所指向的字符串的第一个字符置‘:’。



getopt()函数参数选项

argc和argv就是main函数传进来的参数个数和参数内容数组(两者都包括执行的程序本身);

optstring所指向的字符串包含合法的选项字符,若选项后面没有冒号,则不需要指定参数;若在选项后面加有冒号,表示若使用该选项是必须指定参数的;若选项后面跟两个冒号,表示参数是可选的(如要指定参数,该参数是紧跟在选项后面,中间没有空格隔开,否则就当没有指定参数)。若第一个字符是‘+’,则遇到不是选项的参数时,程序停止检测并退出。若第一个字符是‘-’,则扫描所以选项参数,对于非选项参数,返回1;不加‘-’,也会扫描所有选项参数,只是对于非选项参数,返回63(对应‘?’)。


函数功能

getopt()函数用来解析命令行参数,getopt()将以‘-’开头,紧随其后的字符作为一个选项返回(该字符对应的整数),同时更新optind,以便下次调用接着检测剩余参数;如果没有可检测的参数选项了,则返回-1。若遇到参数‘--’,则强制停止,不继续扫描后面的参数。


返回值

正常情况返回选项字符;无可检测参数时返回-1。如遇到非合法的字符,则返回字符‘?’;如需要指定参数而没有,则函数返回的值根据optstring指向的字符串第一个字符是否是‘:’,如果是‘:’,则返回‘:’,否则返回‘?’。


例子

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
	int flags, opt;
	int nsecs, tfnd;

	nsecs = 0;
	tfnd = 0;
	flags = 0;

	printf("argc = %d\n", argc);

	while ((opt = getopt(argc, argv, "nt:")) != -1)
	{
		switch (opt)
		{
			case 'n' :
				flags = 1;
				break;
			case 't':
				nsec = atoi(optarg);
				tfnd = 1;
				break;
			default:
				printf("error\n");
		}

		printf("flags = %d; ftnd = %d; optind = %d\n", flags, tfnd, optind);

		if (optind >= argc)
		{
			printf("error 2\n");
		}
	} 

	return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值