Linux之getopt函数

本文介绍了Linux中的getopt函数,用于处理命令行输入参数。通过示例展示了getopt如何接收并解析-w,-h和-n参数,其中-n参数需要带有参数字符串。当遇到未知选项或缺失参数时,系统会给出友好的提示。文章还提到了如何关闭系统默认提示及自定义错误提示的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getopt函数的作用是用来对命令行输入的参数进行处理。直接看例子。


1 源代码 getopt.c

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

int main(int argc, char **argv)
{
	char optChar;
	while(-1 != (optChar=getopt(argc, argv, "whn:")))
	{
		switch(optChar)
		{
			case 'w':
				printf("Welcome!\n");
				break;
			case 'h':
				printf("Hello!\n");
				break;
			case 'n':
				printf("Hi, %s!\n", optarg);
				break;
		}
	}
	return 0;
}


2 运行结果

$ ./getopt -w

Welcome!

$ ./getopt -h

Hello!

$ ./getopt -n mjzhan

Hi, mjzhan!

$ ./getopt -hn mjzhan

Hello!

Hi, mjzhan!


3 对关键语句进行解释

 optChar=getopt(argc, argv, "whn:")

        3.1 getopt的输入参数

        getopt有三个参数,前两个不多做解释。第三个"whn:"表示可以接收的参数为w,h和n,n后面多了个冒号表示n参数需要带上相应的参数字符串,而这个参数字符串是存储在外部全局变量optarg中的。

如上例的./getopt -n mjzhan。

        3.2 getopt的返回值

        getopt每次返回一个从命令行输入的参数,在本例中将返回值赋给optChar,然后再对optChar进行判断处理,有多个参数时需要使用循环来多次调用getopt函数。

如./getopt -hn mjzhan的运行结果有两行,就是分别对h和n这两个参数执行的结果。

        当命令行输入的参数都读取完毕后,返回-1,本例中就表现为while循环退出。

经过上面的介绍,应该可以掌握getopt最基本的使用方法了。

4 参数错误处理

        有人会问,如果我输入的参数不在whn三者之一,或者我输入的n参数后面没有跟参数字符串呢?上运行示例:

$ ./getopt -j

getopt: unknown option -- j

$ ./getopt -n

getopt: option requires an argument -- n

看到没,系统给出的提示还是很friend的。但有人会说,我需要自定义的提示!好了,做两件事就可以了

        4.1 第一件事,让系统提示闭嘴

        这个很简单,将"whn:"变成":whn:"就可以了,也就是前面加个冒号,自己去试试吧,这时候系统会很安静,没有任何错误提示。

        4.2 第二件事,自定义提示

        如果getopt能够返回某两个特定的值,一个告诉我参数错误,一个告诉我参数后面没有跟参数字符串,那么自定义提示就会很简单啊,多加两个case判断嘛!

        确实有这两个返回值,参数错误的返回值是‘?',缺少参数字符串的返回值是':',那么新加的两个case如下:

case ':':
	printf("Need optString!\n");
	break;
case '?':
	printf("Wrong opt!\n");
	break;

        好了,自己去运行一下吧,这时候就会给出自定义的提示了。

        以上只是一些简单的用法,基本场合应该够了,更多的功能大家自己去研究了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值