/ / -> Esecuzione del comando wc usando execv - c, unix, execv

-> Esecuzione del comando wc usando execv-c, unix, execv

Sto cercando di creare una semplice funzione che contenga le linee da un file di testo e stamparlo usando il comando Unix wc (Conteggio parole). Non capisco perché non funzioni, ho provato diversi percorsi per wc posizione ma niente funziona.

Invece, ottengo questo errore:

�%r  : No such file or directory

Voglio usare il wc comando.

Codice:

void count_lines() {
int p;
p=fork();
if(p == 0) {
char* args[] = {"./wc","1.txt",NULL};
execv("./wc",args);
perror(execv);
exit(0);
}

printf("waiting for childn");
wait(NULL);
}

risposte:

2 per risposta № 1

È necessario correggere sotto due righe nel codice. Fornire sempre il percorso completo al percorso del file. In caso di esecuzione del comando non riuscita, è necessario controllare l'autorizzazione di accesso al percorso del file, incluso il permesso di eseguire il file o il comando: -

char* args[]={"wc","-l","/full/path/1.txt",NULL};
execv("/usr/bin/wc",args);

Normalmente tutti i comandi Unix / Linux devono trovarsi nella posizione della directory /usr/bin/. Per ottenere il percorso completo per un comando, prova come di seguito: -

which command #here command can be wc, ls etc. so try which wc

3 per risposta № 2

A meno che tu non abbia un binario nella tua directory corrente, ./wc non funzionerà Dal momento che si desidera utilizzare il wc comando, usa il percorso per raggiungerlo:

int p;
p=fork();

if(p == 0) {
char* args[] = {"wc","1.txt",NULL};
execv("/usr/bin/wc",args);
perror("execv");
exit(0);
}

O potresti usare execvp lasciarlo cercare wc in PATH:

int p;
p=fork();

if(p == 0) {
char* args[] = {"wc","1.txt",NULL};
execvp("wc",args);
perror("execvp");
exit(0);
}