I'm making a small program in C that deals with a lot of command line arguments, so I decided to use getopt to sort them for me.
However, I want two non-option arguments (source and destination files) to be mandatory, so you have to have them as arguments while calling the program, even if there's no flags or other arguments.
Here's a simplified version of what I have to handle the arguments with flags:
while ((c = getopt(argc, argv, "i:d:btw:h:s:")) != -1) {
switch (c) {
case 'i': {
i = (int)atol(optarg);
}
case 'd': {
d = (int)atol(optarg);
}
case 'b':
buf = 1;
break;
case 't':
time = 1;
break;
case 'w':
w = (int)atol(optarg);
break;
case 'h':
h = (int)atol(optarg);
break;
case 's':
s = (int)atol(optarg);
break;
default:
break;
}
}
How do I edit this so that non-option arguments are also handled?
I also want to be able to have the non-options either before or after the options, so how would that be handled?
The GNU Libc example is also not working for MinGW-W64 7.1.0. The non-option arguments are not shifted to the end so that the parsing stops after the first non-option arguments.
So the default permutation option seems not to work.
Really good example could be found here: GNU Libc The code:
It allows to have options before and after arguments. I did compile and run test example:
getopt
sets theoptind
variable to indicate the position of the next argument.Add code similar to this after the options loop:
Edit:
If you want to allow options after regular arguments you can do something similar to this: