Вот простая программа, которая анализирует входные аргументы на основе флагов -f и -e.Обработка ошибок для недопустимых аргументов должна быть улучшена и реализована таким образом, чтобы соответствовать вашему конкретному приложению.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
typedef struct arguments {
char *fname;
int file_flag;
char *exename;
int exe_flag;
} arguments;
int main(int argc, char **argv)
{
extern char *optarg;
extern int optind;
int c = 0;
arguments *input_args;
input_args = (arguments *)malloc(sizeof(arguments));
if (input_args == NULL) {
fprintf(stderr, "Failed to allocate memory!\n");
return -1;
}
input_args->file_flag = 0;
input_args->exe_flag = 0;
/* You can initialize the arguments with some default values */
input_args->exename = "default_exename";
input_args->fname = "default_filename";
const char *usage = "Usage: %s -f [File path] -e [exe file]\n";
while ((c = getopt(argc, argv, "f:e:")) != -1)
switch (c) {
case 'f':
input_args->file_flag = 1;
input_args->fname = optarg;
break;
case 'e':
input_args->exe_flag = 1;
input_args->exename = optarg;
break;
default:
fprintf(stderr, usage, argv[0]);
return -1;
}
if (0 == input_args->file_flag)
{
printf("No file argument provided!\n");
printf("Initializing the file name with default value %s!\n", input_args->fname);
}
if (0 == input_args->exe_flag) {
printf("No exe argument provided!\n");
printf("Initializing the exe name with default value %s!\n\n", input_args->exename);
}
printf("File name = \"%s\"\n", input_args->fname);
printf("Exe name = \"%s\"\n", input_args->exename);
return 0;
}