Getopt- Pasando parámetro de cadena para el argumento
Tengo un programa que toma múltiples argumentos de la línea de comandos, así que estoy usando getopt. Uno de mis argumentos toma una cadena como parámetro. ¿Hay alguna forma de obtener esa cadena a través de la función getopt o tendría que obtenerla a través de la matriz argv []? También puede obtener leer como args-file
? Todos los argumentos que he visto hasta ahora solo tienen un carácter como-a
EDITAR
De las siguientes respuestas, he escrito un programa para usar getopt_long (), pero la instrucción de cambio solo reconoce el argumento cuando uso el argumento de carácter y no el argumento largo. No estoy seguro de por qué sucede esto. Al pasar los argumentos-mf -file sample
No veo las declaraciones impresas.
EDITAR
Intenté ingresar los argumentos de comando como--file
y luego funcionó. ¿No es posible hacer esto con solo-file
?
static struct option long_options[] =
{
{"mf", required_argument, NULL, 'a'},
{"md", required_argument, NULL, 'b'},
{"mn", required_argument, NULL, 'c'},
{"mw", required_argument, NULL, 'd'},
{"lf", required_argument, NULL, 'e'},
{"ld", required_argument, NULL, 'f'},
{"ln", required_argument, NULL, 'g'},
{"lw", required_argument, NULL, 'h'},
{"rf", required_argument, NULL, 'i'},
{"rd", required_argument, NULL, 'j'},
{"rn", required_argument, NULL, 'k'},
{"rw", required_argument, NULL, 'l'},
{"df", required_argument, NULL, 'm'},
{"dd", required_argument, NULL, 'n'},
{"dn", required_argument, NULL, 'o'},
{"dw", required_argument, NULL, 'p'},
{"file", required_argument, NULL, 'q'},
{NULL, 0, NULL, 0}
};
int ch=0;
while ((ch = getopt_long(argc, argv, "abcdefghijklmnopq:", long_options, NULL)) != -1)
{
// check to see if a single character or long option came through
switch (ch){
case 'a':
cout<<"title";
break;
case 'b':
break;
case 'c':
break;
case 'd':
break;
case 'e':
break;
case 'f':
break;
case 'g':
break;
case 'h':
break;
case 'i':
break;
case 'j':
break;
case 'k':
break;
case 'l':
break;
case 'm':
break;
case 'n':
break;
case 'o':
break;
case 'p':
break;
case 'q':
cout<<"file";
break;
case '?':
cout<<"wrong message"
break;
}
}