getopt() 函数的简介

对于程序员来说,在linux上用的最多的就是通过命令行来运行程序,但是很多人都不是很清楚命令行的书写格式规范,所以当输入错误的时候,shell就会提示输入错误之类的信息。

我们可以自己编写命令行参数解析程序,但是其实linux已经提供了一个函数来实现相关的功能,这个函数就是getopt函数。

相关函数头文件

#include<unistd.h>
函数原型及相关外部变量声明

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

extern char *optarg;    // 如果一个选项后面接有一个参数值, 则 optarg 就会指向该参数值

extern int optind,         // 初始化值为1,被设置为下一个待处理参数的索引。用来记录 getopt 的进度。

extern int opterr,         // 初始化值为1,当opterr=0时,getopt不向stderr输出错误信息。

extern int optopt;        // 当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,

// 该选项将存储在optopt中, getopt 返回‘?’

函数说明

getopt() 用来分析命令行参数,也就是主要用来分析命令行参数中的选项的。参数 argc 和 argv 是由 main() 传递的参数个数和内容。参数 optstring 表示选项指定符字符串。该字符串告诉 getopt 哪些选项可用,以及它们是否有关联值。每调用一次 getopt() 函数,返回一个选项,如果该选项有参数(关联值),则 optarg 指向该参数(关联值)。

函数 getopt() 认为 optstring 中,以 ‘-’ 开头的字符(注意!不是字符串!!)就是命令行参数选项,有的参数选项后面可以跟参数值。optstring 中的格式规范如下:
      1) 单个字符,表示选项,
      2) 单个字符后接一个冒号“ :”,表示该选项后必须跟一个参数值(关联值)。参数紧跟在选项后或者以空格隔              开。该参数的指针赋给optarg。
      3) 单个字符后跟两个冒号 ” :: ”,表示可选值选项,该选项后如果跟一个参数。参数必须紧跟在选项后不能以空              格隔开。该参数的指针赋给 optarg。

在这里拿 "1ac:d::" 作为样例进行说明,其中的1, a 就是不带值的参数选项,c 是必须带值的参数选项,d是可选值的参数。

  在实际调用中,‘-1 -a -c cvalue -d‘,   ‘-1 -a -c cvalue -ddvalue‘,  ‘-1a -ddvalue -c cvalue‘都是合法的。这里需要注意三点:

  1. 不带值的参数可以连写,象1和a是不带值的参数,它们可以-1 -a分开写,也可以-1a或-a1连写。

  2. 参数不分先后顺序,‘-1a -c cvalue -ddvalue‘和‘-d -c cvalue -a1‘的解析结果是一样的。

  3. 要注意可选值的参数的值与参数之间不能有空格,必须写成-ddvalue这样的格式,如果写成-d dvalue这样的              格式就会解析错误。

返回值

   getopt() 每次调用会逐次返回命令行传入的参数。

     当没有参数的最后的一次调用时,getopt() 将返回 -1。

     当解析到一个不在 optstring 里面的参数,或者一个必选值参数不带值时,返回 ‘ ? ‘。

     当 optstring 是以 ‘ : ‘ 开头时,缺值参数的情况下会返回 ‘ : ‘,而不是 ‘ ? ‘ 。

程序范例

getopt() 函数的简介,布布扣,bubuko.com

时间: 2024-10-11 23:20:16

getopt() 函数的简介的相关文章

C语言-getopt函数

#include<unistd.h> int getopt(int argc,char *const argv[],const char *optstring); extern char *optarg; extern int optind,opterr,optopt; optstring为一个字符列表,每个字符代表一个单字符选项 全局变量: optarg:存数据 optind opterr:控制是否向STDERR打印错误.若值为0,则关闭打印错误信息 optopt:存储出错的option(如

getopt函数

平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些"可选参数"的功能将很难实现. 我们可以使用getopt.getopt_long.getopt_long_only来对这个问题进行处理. #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern

使用getopt函数对命令行短形参进行处理

今天,在看man 9 style时见到了用来处理命令行短形参getopt函数,很是诧异 -- 要知道,我处理命令行参数都是用手动的!于是我如获至宝,赶紧学习学习.getopt的原型被放在unistd.h中,它的原型是这样的:int getopt(int argc, char * const argv[], const char *optstring)这里的argc,argv就是main函数的形参,需要调用是只要把main形参给传过去就ok了.后面的optstring是一个集合,包括了所有可能的短

如何使用getopt()函数解析参数

最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main( int argc, char *argv[] )(或int main( int argc, char **argv ))时,系统将把用户输入的参数通过argc和argv引入程序中,argc为参数的个数,argv是指向参数的指针数组,其中第一个参数为自身程序文件名. 这里我们使用getopt() 

C语言getopt()函数

相关函数表头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const argv[ ],const char * optstring); 函数说明 该函数的argc和argv参数通常直接从main()的参数直接传递而来.optstring是选项字母组成的字串.如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数. 当给定getopt()命令参数的数量 (argc).指向这些参数的数组 (argv) 和选项字串 (optstr

liunx 系统调用 getopt() 函数

命令行参数解析函数 -- getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg;extern int optind, opterr, optopt; 该函数的argc和argv参数通常直接从main()的参数直接传递而来.optstring是选项字母组成的字串.如果该字串里的任一字符后面有

Unix/Linux程序设计之getopt函数浅谈

Linux中getopt函数用法:    1.函数作用: getop函数用于解析命令行参数的以'-'或者'--'开头的参数选项,除去'-'或者'--'选项元素    如果被重复调用,则它将会依次返回每个选项元素中选项字符.    2.函数原型:        #include <unistd.h>     int getopt(int argc, char * const argv[],                   const char *optstring);     extern 

[19/05/29-星期三] JavaScript_ 函数的简介

一.函数的简介 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>函数的入门</title> </head> <script type="text/javascript"> /*函数(function)也是个对象,可以封装一些代码,在需要时调用 使用typeof检查函数对象时,会返回function 可

Python中getopt()函数的使用

在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能.目前有短选项和长选项两种格式.短选项格式为"-"加上单个字母选项:长选项为"--"加上一个单词.长格式是在Linux下引入的.许多Linux程序都支持这两种格式.在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单. 取得命令行参数 在使用之前,首先要取得命令行参数.使用sys模块可以得到命令行参数.import sysprint sys.argv 然后在命令行