Home A Simple Parser in C Using Getopt
Post
Cancel

A Simple Parser in C Using Getopt

In Python, there is an official module called argparse that provides a versatile command-line parser. Things are a little bit different in C, though. The GNU’s getopt() function is used to parse the command-line arguments with limited functionalities. In this post, I will show how to use getopt() to parse command-line arguments in C.

Getopt in an Example

The basic usage of getopt() is as follows:

1
2
#include <unistd.h>
int getopt(int argc, char **argv, char *optstring);

The argc and argv are passed from main() in C. The optstring is a string of characters that specifies the valid options. For example, a string "abc:d:" means that the valid options are -a, -b, -c, and -d. Characters followed by a colon to indicate an option argument is to follow. So in this example, they are -c argument and -d argument. The argument is saved in an external variable optarg as a string.

The getopt() function incrementally parses a command-line argument list argv and returns the next known option character. If there are no more options, -1 is returned. In practice, the getopt() function is used in the following way:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int c;
    while ((c = getopt(argc, argv, "ab:c")) != -1) {
        switch (c) {
        case 'a':
            printf("option a\n");
            break;
        case 'b':
            printf("option b with value '%s'\n", optarg);
            break;
        case 'c':
            printf("option c\n");
            break;
        case '?':
            printf("unknown option\n");
            break;
        default:
            abort();
        }
    }
    return 0;
}

Limitations

  • The getopt() function does not support long options, only single-character options are supported.
  • There is no type casting or checking in the arguments, so extra care should be taken to make sure the arguments are correct.
  • It cannot generate help messages. You will have to write your own help messages by adding a -h option.

Further Reading

Read the getopt(3) manual page using man 3 getopt to learn more about what getopt can do for you. I also found another well-written blog on this topic you may be interested in.

That is all for this post. Hasta Luego.

This post is licensed under CC BY 4.0 by the author.

FFT-Based FIR Filtering Using Overlap-Add Method: a Matlab Implementation

-

Comments powered by Disqus.