Je voudrais exécuter la commande Linux "pwd" via une fonction en langage C comme execv ().
Le problème est qu'il n'y a pas de fichier exécutable appelé "pwd" et je ne peux pas exécuter "echo $ PWD", car echo est également une commande intégrée sans aucun exécutable à trouver.
Vous devez exécuter sh -c echo $PWD
; généralement sh -c
exécutera les commandes Shell.
(En fait, system(foo)
est défini comme execl("sh", "sh", "-c", foo, NULL)
et fonctionne donc pour les fonctions intégrées de Shell.)
Si vous voulez juste la valeur de PWD
, utilisez getenv
, cependant.
Si vous souhaitez simplement exécuter la commande Shell dans votre programme c, vous pouvez utiliser,
#include <stdlib.h>
int system(const char *command);
Dans ton cas,
system("pwd");
Le problème est qu'il n'y a pas de fichier exécutable appelé "pwd" et je ne peux pas exécuter "echo $ PWD", car echo est également une commande intégrée sans exécutable pour
Que veux-tu dire par là? Vous devriez pouvoir trouver les paquets mentionnés dans / bin /
Sudo find / -executable -name pwd
Sudo find / -executable -name echo
Vous pouvez utiliser la commande excecl
int execl(const char *path, const char *arg, ...);
Comme montré ici
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl ("/bin/pwd", "pwd", NULL);
}
Le deuxième argument sera le nom du processus tel qu'il apparaîtra dans la table des processus.
Alternativement, vous pouvez utiliser la fonction getcwd () pour obtenir le répertoire de travail actuel:
#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;
}