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 № 1Sie 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);
}