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