alayi

程序人生用音乐来点缀

博客园 首页 联系 订阅 管理
重温Linux编程(一)
————alayi
1 参数处理 getopt()

  这个getopt()函数分析一个命令行参数列argv,并返回下一个已知的选项(option)。如果一个选项在可接受选项串optstring中列出,那么它就是已知的。

这个选项串optstring可以包含下列元素:单个字符,字符后面接一个冒号说明后面跟随一个选项参数。例如,一个选项字符"x"表示选项"-x",选项字符"x:"表示选项和其参数"-x argument"。一个跟随的参数argument是否引导一个空格与getopt()无关。

在getopt()的返回中,optarg指向选项参数,如果它是anticipated,并且变量optind包含下一个argv参数作为对getopt()下一次调用的索引。变量optopt保存最后一个由getopt()返回的已知的选项。

变量opterr和optind都被初始化为1。变量optind可能在对getopt()的调用前已设成其他值的调用前,为了略去或多或少的argv入口。

为了使用getopt()来处理多组参数,或多次处理单组参数,变量optreset必须在每一个对getopt()附加的调用前设置成1,并且变量optind必须已被初始化。

当参数列已经到尾时getopt()函数返回-1,或者返回'?'当遇到一个未知的选项。参数列中选项的解释可能会被'--'取消,由于它引起getopt()给参数处理发送结束信号并返回-1。当所有的选项都被处理后(比如一直到第一个非选项参数),getopt()返回-1。
  如果getopt()函数遇到一个在optstring中没有的字符或检测到一个缺选项的参数,它会向stderr中写一个错误信息并返回'?'。将opterr置0可以使它不向stderr中写错误信息。如果optstring以':'开头,那么一个却选项的参数会使':'返回除suppressing之外的任何错误信息。选项参数允许使用"-"开头;这是合理的,但可能减少错误检测的总数。
  变量optreset的增加使多次调用getopt()函数成为可能。这是IEEE 1003.2(POSIX.2)规范的扩展部分。

  

 

int 0c;           /*选项字符*/  
char *
b_opt_arg;

while ((oc = getopt(argc, argv, ":ab:")) != -1
){
    swirch (oc){
    
case 'a'
:
             
/*处理-a,要在此设置一个标志,不管这标志是什么*/

         
break;
    
case 'b'
:
             
/*处理-b,从optarg得到参数值*/

             b_opt_arg 
= optarg;
             
break
;
    
case ':'

             
/*缺少选项参数*/
             fprintf(stderr, 
"%s: option `-%c requires an argument\n", argv[0], optopt);
             
break
;
    
case '?'

             
/*无效参数*/
             fprintf(stderr, 
"%s: option `-%c requires an argument\n", argv[0], optopt);
             
break
;
    }
}

长选项处理
getopt_long()

2 环境
. . . . . .

3 内存管理

程序内存 地址空间 可执行文件节
代码 代码 代码
初始化数据 数据 数据
BSS 数据 BSS
数据

                                                                                                            可执行程序段和他们的位置





posted on 2007-11-05 09:49  alayi  阅读(130)  评论(0)    收藏  举报