/ / -> Ausführen des Befehls wc mit execv - c, unix, execv

-> Ausführen von wc-Befehl mit Execv - c, Unix, Execv

Ich versuche, eine einfache Funktion zu erstellen, die Zeilen aus einer Textdatei zählt und diese mit dem Unix-Befehl druckt wc (Wortzahl). Ich verstehe nicht, warum es nicht funktioniert, ich habe verschiedene Wege ausprobiert wc Lage aber nichts geht.

Stattdessen erhalte ich diesen Fehler:

�%r  : No such file or directory

Ich möchte das benutzen wc Befehl.

Code:

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

Antworten:

2 für die Antwort № 1

Sie müssen unten in Ihrem Code zwei Zeilen korrigieren. Geben Sie immer den vollständigen Pfad zum Dateispeicherort an. Im Falle einer nicht erfolgreichen Befehlsausführung müssen Sie die Zugriffsberechtigung für den Dateispeicherort überprüfen, einschließlich der Berechtigung zum Ausführen der Datei oder des Befehls:

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

Normalerweise sollten sich alle Unix / Linux-Befehle im Verzeichnis befinden /usr/bin/. Um den vollständigen Pfad für einen Befehl zu erhalten, versuchen Sie es wie folgt: -

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

3 für die Antwort № 2

Sofern Sie keine Binärdatei in Ihrem aktuellen Verzeichnis haben, ./wc wird nicht funktionieren. Da willst du den nutzen wc Befehl, verwenden Sie den Pfad dazu:

int p;
p=fork();

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

Oder du könntest es benutzen execvp um es suchen zu lassen wc im PATH:

int p;
p=fork();

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