Domanda

Ho un programma C che mostra la sua riga di comando ripetendo la variabile argv .

#include <stdio.h>

int main(int argc, char *argv[]){
    int i = 0;
    printf("----------\n");
    for(i = 0; i < argc; i++)
        printf("%s\n", argv[i]);
    return 0;
}

Ho invocato il programma in una cartella contenente un grande albero dei sorgenti C ++ come questo:

./a.out **/*.h

L'output:

zsh: argument list too long: ./a.out

Tuttavia, programmi come ls e grep funzionano senza problemi quando vengono richiamati usando il glob ** / *. h nella stessa cartella . Perché zsh non riesce quando si richiama il mio programma? Come funziona zsh sull'espansione dei caratteri jolly?

Modifica: sto usando zsh su cygwin.

È stato utile?

Soluzione

L'applicazione che hai provato a eseguire un'app di Windows (inclusa mingw) o un'app Cygwin?

ARG_MAX definisce quanto può essere lunga la riga di comando. Di solito è impostato dal sistema operativo e tutte le applicazioni sono limitate ad esso, ma sulle applicazioni Cygwin compilate per Cygwin possono utilizzare un buffer più grande rispetto alle app di Windows - vedere questo messaggio per una discussione di esempio.

Se non hai necessariamente tutti i file richiesti come args allo stesso tempo, puoi usare xargs per partizionare i nomi dei file in blocchi che si adattano ad ARG_MAX:

echo **/*.h | xargs ./a.out

Altri suggerimenti

Ho compilato il tuo codice ed eseguito nella directory corrente in un modo simile e ha funzionato bene senza alcun messaggio di errore. Inoltre mi sono imbattuto in questo messaggio pubblicato da qualcuno che suggerisce che il messaggio di errore "elenco argomenti troppo lungo" non esiste nel codice Souce per zsh, quindi potrebbe effettivamente essere un problema del sistema operativo: http : //www.zsh.org/mla/workers/1996/msg00060.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top