OK, je l'ai cherché et trouvé les deux sujets de suite qui m'a commencé dans la bonne direction:getopt_long() - bonne façon de l'utiliser?
Argument-parsing helpers for C/UNIX
Pass arguments into C program from command line
NOTE: TOUS CODE EST-CODE PSEUDO. POSTERA UN CODE COMPILABLE LORSQU'IL FONCTIONNERA.
Cependant, je suis encore complètement confus sur la façon d'utiliser getopt_long() en C. Le programme que j'écris est défini comme ayant les balises possibles suivantes (mais peut inclure autant que vous en avez absolument besoin, en remplissant le reste avec des valeurs vides):
id3tagEd filename -title "title" -artist "artist" -year 1991 -comment "comment" -album "album" -track 1
maintenant, d'après ce que je lis, je dois utiliser une struct pour les options longues, non? Si oui, je l'ai écrit quelque chose le long des lignes de ce:
struct fields field =
{
char *[] title;
char *[] artist;
char *[] album;
int year;
char *[] comment;
int track;
}
static struct options long_options[] =
{
{"title", 0, &field.title, 't'},
{"artist", 0, &field.artist, 'a'},
{"album", 0, &field.album, 'b'},
{"year", 0, &field.year, 'y'},
{"comment", 0, &field.comment, 'c'},
{"track", 0, &field.track, 'u'},
{0, 0, 0, 0}
}
Maintenant, ce que je compris, je serais l'appeler par ceci:
int option_index = 0;
int values = getopt_long(argc, argv, "tabycu", long_options, &option_index);
A partir de là, pourrais-je utiliser strictement le champ struct et faire ce dont j'ai besoin dans mon programme? Cependant, si tel est le cas, quelqu'un peut-il expliquer la structure entière de long_options? J'ai lu les pages de manuel et autres, et je suis complètement confus. En relisant les pages man, je peux voir que je peux définir des variables à null, et devrait mettre toutes mes exigences d'option à "required_argument"? Et puis définir les structures via une boucle while()? Cependant, je vois optarg utilisé. Est-ce que cela est défini par getopt_long()? Ou est-il manquant de l'exemple?
Et un dernier problème, j'aurai toujours une option obligatoire non nommée: nom de fichier, est-ce que j'utiliserais simplement argv [0] pour y avoir accès? (Puisque je peux supposer que ce sera le premier). Sur une note de côté, cela est lié à un problème de devoirs, mais il n'a rien à voir avec la fixation, c'est plus fondamental, avoir à comprendre l'argument passant et l'analyse en C via la ligne de commande d'abord.
La définition struct montre ne compilera pas. S'il vous plaît fournir un code compilable. –
'char * [] title;' n'est pas une déclaration valide. essayez 'char * title [];' Notez que '& field.title' renverra un' char *** 'qui n'est probablement pas ce que vous voulez. –
Voir les pages de man pour getopt (3) et getopt_long (3), les deux ont des exemples. –