2013-10-06 13 views
8

Vorrei eseguire il comando Linux "pwd" tramite una funzione in linguaggio C come execv().Come si esegue un comando incorporato Shell con una funzione C?

Il problema è che non esiste un file eseguibile chiamato "pwd" e non riesco a eseguire "echo $ PWD", poiché echo è anche un comando incorporato senza alcun eseguibile da trovare.

+0

uomo getcwd. Questo è tutto ciò di cui hai bisogno. –

+0

Charlie Burns, la macchina virtuale mi è stata fornita priva di una voce per getcwd. Grazie lo stesso. – user2851770

+0

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

risposta

6

È necessario eseguire sh -c echo $PWD; generalmente sh -c eseguirà i comandi della shell.

(In realtà, system(foo) è definita come execl("sh", "sh", "-c", foo, NULL) e lavora quindi per shell built-in.)

Se si desidera solo il valore di PWD, utilizzare getenv, però.

+0

Ho usato la funzione getenv. Grazie! – user2851770

5

È possibile utilizzare il comando excecl

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

come mostrato qui

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

int main (void) { 

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

} 

Il secondo argomento sarà il nome del processo così come apparirà nella tabella dei processi.

In alternativa, è possibile utilizzare la funzione getcwd() per ottenere la directory di lavoro corrente:

#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

Se si desidera solo per eseguire il comando di shell nel programma c, si potrebbe usare,

#include <stdlib.h> 

    int system(const char *command); 

Nel tuo caso,

system("pwd"); 

Il problema è che non esiste un file eseguibile chiamato "pwd" e non riesco a eseguire "echo $ PWD", poiché echo è anche un comando incorporato senza alcun eseguibile da trovare.

Cosa intendi con questo? Si dovrebbe essere in grado di trovare i pacchetti citati in /bin/

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

Sono ancora nuovo in questo genere di cose. Ho provato a utilizzare "which pwd" sulla shell e ha solo restituito che "pwd" è un comando incorporato. Grazie, comunque! – user2851770

Problemi correlati