<TITLE>getopt</TITLE>
<body background=../../GRAPHICS/bg1.gif>
<hr>
<pre>



<h3>GETOPT(3)           Linux Programmer's Manual           GETOPT(3)
</h3>

<h3>NAME
</h3>       getopt - Read command line options

<h3>SYNOPSIS
</h3>       #include &lt;unistd.h&gt;

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

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

       #include &lt;getopt.h&gt;

       int getopt_long(int argc, char * const argv[],
                       const char *shortopts,
                       const struct option *longopts, int longind);

<h3>DESCRIPTION
</h3>       The  getopt()  function parses the command line arguments.
       Its arguments argc and argv are  the  argument  count  and
       array  as passed to the main() function on program invoca-
       tion.  optstring is a list of available option characters.
       If  such  a  character  is followed by a colon, the option
       takes an argument, which is placed in optarg.

       The external variable optind is  the  index  of  the  next
       array  element  of argv[] to be processed; it communicates
       from one call of getopt() to the  next  which  element  to
       process.

       The getopt_long() function works like getopt() except that
       it also accepts long options, started out by  two  dashes.
       If these take values, it is either in the form --arg=value
       or --arg value.  It takes the  additional  arguments  lon-
       gopts  which is a pointer to the first element of an array
       of struct option declared in &lt;getopt.h&gt; as

          struct option {
              const char *name;
              int has_arg;
              int *flag;
              int val;
          };

          The meaning of the different fields are:

       name   is the name of the long option.

       has_arg
              is a boolean value which should be set  to  nonzero
              if the long option takes a value.

       flag   determines   the   return  value  if  getopt_long()



<h3>GNU                       April 25, 1993                        1
</h3>




<h3>GETOPT(3)           Linux Programmer's Manual           GETOPT(3)
</h3>

              returns a value for a long option; if  it  is  non-
              zero,  zero is returned as a function value, other-
              wise val.

       val    determines the value to return if flag is zero.

       The last element of  the  array  has  to  be  filled  with
       zeroes.

       The  option_index  points  to the index of the long option
       relative to longopts.

<h3>RETURN VALUE
</h3>       The getopt() function returns the option character if  the
       option  was found successfully, ':' if there was a missing
       parameter for one of  the  options,  '?'  for  an  unknown
       option character and -1 for the end of the option list.

<h3>EXAMPLE
</h3>       The  following  example  program,  from  the  source code,
       illustrates the use of getopt_long() with most of its fea-
       tures.

       #include &lt;stdio.h&gt;

       int
       main (argc, argv)
            int argc;
            char **argv;
       {
         int c;
         int digit_optind = 0;

         while (1)
           {
             int this_option_optind = optind ? optind : 1;
             int option_index = 0;
             static struct option long_options[] =
             {
            {"add", 1, 0, 0},
            {"append", 0, 0, 0},
            {"delete", 1, 0, 0},
            {"verbose", 0, 0, 0},
            {"create", 1, 0, 'c'},
            {"file", 1, 0, 0},
            {0, 0, 0, 0}
             };

             c = getopt_long (argc, argv, "abc:d:012",
                        long_options, &option_index);
             if (c == -1)
            break;

             switch (c)



<h3>GNU                       April 25, 1993                        2
</h3>




<h3>GETOPT(3)           Linux Programmer's Manual           GETOPT(3)
</h3>

            {
            case 0:
              printf ("option %s", long_options[option_index].name);
              if (optarg)
                printf (" with arg %s", optarg);
              printf ("0);
              break;

            case '0':
            case '1':
            case '2':
              if (digit_optind != 0 && digit_optind != this_option_optind)
                printf ("digits occur in two different argv-elements.0);
              digit_optind = this_option_optind;
              printf ("option %c0, c);
              break;

            case 'a':
              printf ("option a0);
              break;

            case 'b':
              printf ("option b0);
              break;

            case 'c':
              printf ("option c with value `%s'0, optarg);
              break;

            case 'd':
              printf ("option d with value `%s'0, optarg);
              break;

            case '?':
              break;

            default:
              printf ("?? getopt returned character code 0%o ??0, c);
            }
           }

         if (optind &lt; argc)
           {
             printf ("non-option ARGV-elements: ");
             while (optind &lt; argc)
            printf ("%s ", argv[optind++]);
             printf ("0);
           }

         exit (0);
       }

<h3>BUGS
</h3>       This manpage is confusing.



<h3>GNU                       April 25, 1993                        3
</h3>




<h3>GETOPT(3)           Linux Programmer's Manual           GETOPT(3)
</h3>

<h3>CONFORMS TO
</h3>       getopt() :
              POSIX.1






















































<h3>GNU                       April 25, 1993                        4
</h3>


</pre>
<P>
<hr>
<p>
<center>
<table border=2 width=80%>
<tr align=center>
<td width=25%>
<a href=../cref.html>Top</a>
</td><td width=25%>
<a href=../master_index.html>Master Index</a>
</td><td width=25%>
<a href=../SYNTAX/keywords.html>Keywords</a>
</td><td width=25%>
<a href=../FUNCTIONS/funcref.htm>Functions</a>
</td>
</tr>
</table>
</center>
<p>
<hr>

This manual page was brought to you by <i>mjl_man V-2.0</i>