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;  
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta