On Jan 16, 2008 10:35 PM, Sebastian Reitenbach <[EMAIL PROTECTED]> wrote: > Hi, > > I run into troubles with getopt(3). the test program below shows the > problem. It produces different output on Linux and OpenBSD, when it is > called like this on Linux it looks like this: > > ./a.out asdf -n > option char: 110, n > > on OpenBSD, getopt returns -1 and no output is shown. > what would be the best way to make it work on OpenBSD?
Define POSIXLY_CORRECT in your Linux program to make it work like on OpenBSD ;) See the getopt(3) on your Linux system for more details, but basically, OpenBSD getopt(3) stops when it encounters the first non-option argument, while GNU getopt(3) parses the whole argv array. If you really need your "asdf" argument before the option, you can parse it and do the argv++, argc-- dance before calling getopt(3). Otherwise, just use ./a.out -n asdf. > > cheers > Sebastian > > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > > extern char *optarg; > extern int opterr; > extern int optind; > extern int optopt; > extern int optreset; > > int main (int argc, char **argv) > { > char *optstr = "mpn"; > int option_char; > do > { > option_char = getopt(argc, argv, optstr); > if (option_char == -1) { > break; > } > switch (option_char) { > case 'm': > case 'p': > case 'n': > default: > printf("option char: %i, %c\n", > option_char, option_char); > break; > } > } while (1); > > return 0; > } > > -- Pierre Riteau