Wie führe ich einen in die Shell integrierten Befehl mit einer C-Funktion aus?
Lesezeit: 2 Minuten
Ich möchte den Linux-Befehl “pwd” über eine C-Sprachfunktion wie execv() ausführen.
Das Problem ist, dass es keine ausführbare Datei namens “pwd” gibt und ich “echo $PWD” nicht ausführen kann, da echo auch ein integrierter Befehl ist, in dem keine ausführbare Datei gefunden werden kann.
man bekommtcwd. Das ist alles, was Sie brauchen.
– Charlie Burns
6. Oktober 2013 um 14:07 Uhr
Charlie Burns, der virtuellen Maschine, die mir zur Verfügung gestellt wurde, fehlt ein Eintrag für getcwd. Trotzdem danke.
Wenn Sie nur den Shell-Befehl in Ihrem C-Programm ausführen möchten, können Sie Folgendes verwenden:
#include <stdlib.h>
int system(const char *command);
In Ihrem Fall,
system("pwd");
Das Problem ist, dass es keine ausführbare Datei namens “pwd” gibt und ich “echo $PWD” nicht ausführen kann, da echo auch ein integrierter Befehl ist, in dem keine ausführbare Datei gefunden werden kann.
Was meinst du damit? Sie sollten in der Lage sein, die genannten Pakete zu finden /Behälter/
Ich bin noch neu in so etwas. Ich habe versucht, “what pwd” auf der Shell zu verwenden, und es wurde nur zurückgegeben, dass “pwd” ein integrierter Befehl ist. Trotzdem danke!
– Benutzer2851770
6. Oktober 2013 um 14:32 Uhr
Verzeihen Sie meine mögliche Unwissenheit, aber das wird nur mit dem Rückgabecode und nicht mit stdout zurückgegeben, richtig?
– Jpatrick
30. August 2019 um 15:02 Uhr
@Jpatrick Du hast recht. system hilft bei der Ausführung von Shell-Befehlen und ist auch in der Lage, den Rückgabecode mit ein paar anderen Systemaufrufen zu lesen. Wenn Sie die Standardausgabe des Programms lesen möchten, müssen Sie stattdessen popen() verwenden: gnu.org/software/libc/manual/html_node/…
– sm Raj
22. November 2019 um 22:47 Uhr
Sie sollten ausführen sh -c echo $PWD; allgemein sh -c führt Shell-Befehle aus.
(In der Tat, system(foo) ist definiert als execl("sh", "sh", "-c", foo, NULL) und funktioniert daher für Shell-Built-Ins.)
Wenn Sie nur den Wert von wollen PWDverwenden getenvobwohl.
Ich habe die getenv-Funktion verwendet. Vielen Dank!
– Benutzer2851770
6. Oktober 2013 um 14:33 Uhr
PhilippD
Sie können die Funktion execl() verwenden:
int execl(const char *path, const char *arg, ...);
Wie hier gezeigt:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl ("/bin/pwd", "pwd", NULL);
}
Das zweite Argument ist der Name des Prozesses, wie er in der Prozesstabelle erscheint.
Alternativ können Sie die Funktion getcwd() verwenden, um das aktuelle Arbeitsverzeichnis abzurufen:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#define MAX 255
int main (void) {
char wd[MAX];
wd[MAX-1] = '\0';
if(getcwd(wd, MAX-1) == NULL) {
printf ("Can not get current working directory\n");
}
else {
printf("%s\n", wd);
}
return 0;
}
13936000cookie-checkWie führe ich einen in die Shell integrierten Befehl mit einer C-Funktion aus?yes
man bekommtcwd. Das ist alles, was Sie brauchen.
– Charlie Burns
6. Oktober 2013 um 14:07 Uhr
Charlie Burns, der virtuellen Maschine, die mir zur Verfügung gestellt wurde, fehlt ein Eintrag für getcwd. Trotzdem danke.
– Benutzer2851770
6. Oktober 2013 um 14:37 Uhr
theunixshell.blogspot.com/2013/01/…
– Vijay
16. April 2014 um 10:44 Uhr