ARG(2)ARG(2)
NAME
ARGBEGIN, ARGEND, ARGC, ARGF, EARGF – process option letters from argv
SYNOPSIS
#include <u.h>
#include <libc.h>
ARGBEGIN {
char *ARGF();
char *EARGF(code);
Rune ARGC();
} ARGEND
extern char *argv0;
DESCRIPTION
These macros assume the names
argc
and
argv
are in scope; see
exec(2).
ARGBEGIN
and
ARGEND
surround code for processing program options.
The code
should be the cases of a C switch on
option characters;
it is executed once for each option character.
Options end after an argument
--,
before an argument
-,
or before an argument that doesn’t begin with
-.
The function macro
ARGC
returns the current option character, as an integer.
The function macro
ARGF
returns the current option argument:
a pointer to the rest of the option string if not empty,
or the next argument in
argv
if any, or 0.
ARGF
must be called just once for each option
argument.
The macro
EARGF
is like
ARGF
but instead of returning zero
runs
code
and, if that returns, calls
abort(2).
A typical value for
code
is
usage(),
as in
EARGF(usage()).
After
ARGBEGIN,
argv0
is a copy of
argv[0]
(conventionally the name of the program).
After
ARGEND,
argv
points at a zero-terminated list of the remaining
argc
arguments.
EXAMPLE
This C program can take option
b
and option
f,
which requires an argument.
#include <u.h>
#include <libc.h>
void
main(int argc, char *argv[])
{
char *f;
print("%s", argv[0]);
ARGBEGIN {
case 'b':
print(" -b");
break;
case 'f':
print(" -f(%s)", (f=ARGF())? f: "no arg");
break;
default:
print(" badflag('%c')", ARGC());
} ARGEND
print(" %d args:", argc);
while(*argv)
print(" '%s'", *argv++);
print("\n");
exits(nil);
}
Here is the output from running the command
prog -bffile1 -r -f file2 arg1 arg2
prog -b -f(file1) badflag(’r’) -f(file2) 2 args: ’arg1’ ’arg2’
SOURCE
/sys/include/libc.h
SEE
getflags(8)