2013-10-06 4 views
8

Ich möchte den Linux-Befehl "pwd" über eine C-Funktion wie execv() ausführen.Wie führe ich einen integrierten Shell-Befehl mit einer C-Funktion aus?

Das Problem ist, dass es keine ausführbare Datei namens "pwd" gibt und ich kann "echo $ PWD" nicht ausführen, da echo auch ein eingebauter Befehl ohne ausführbare Datei ist.

+0

Mann getcwd Lage zu finden. Das ist alles was du brauchst. –

+0

Charlie Burns, die virtuelle Maschine, die mir zur Verfügung gestellt wurde, hat keinen Eintrag für getcwd. Trotzdem danke. – user2851770

+0

http://theunixshell.blogspot.com/2013/01/executing-shell-command-in-cc-and.html – Vijay

Antwort

6

Sie sollten sh -c echo $PWD ausführen; Im Allgemeinen wird sh -c Shell-Befehle ausführen. obwohl

(In der Tat ist system(foo) als execl("sh", "sh", "-c", foo, NULL) definiert und somit arbeitet für Shell-Einbauten.)

Wenn Sie nur den Wert von PWD wollen getenv verwenden.

+0

Ich habe die Funktion getenv verwendet. Vielen Dank! – user2851770

5

können Sie den Befehl excecl

int execl(const char *path, const char *arg, ...); 

Wie hier verwenden

#include <stdio.h> 
#include <unistd.h> 
#include <dirent.h> 

int main (void) { 

    return execl ("/bin/pwd", "pwd", NULL); 

} 

gezeigt wird Das zweite Argument der Name des Verfahrens, wie es in der Prozesstabelle angezeigt.

Alternativ können Sie die getcwd() Funktion verwenden, um die aktuelle Arbeitsverzeichnis zu erhalten:

#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; 
} 
15

Wenn Sie nur die Shell-Befehl in Ihrem C-Programm ausführen möchten, können Sie 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 kann "echo $ PWD" nicht ausführen, da echo auch ein eingebauter Befehl ist, der keine ausführbare Datei enthält.

Was meinst du damit? Sie sollten die genannten Pakete in /bin/

sudo find/-executable -name pwd 
sudo find/-executable -name echo 
+0

Ich bin immer noch neu in dieser Art von Sache. Ich habe versucht, "which pwd" auf der Shell und es gab nur, dass "pwd" ist ein eingebauter Befehl. Danke, trotzdem! – user2851770

Verwandte Themen