如何使用C函数执行Shell内置命令?

时间:2013-10-06 13:03:01

标签: c shell command exec pwd

我想通过像execv()这样的C语言函数执行Linux命令“pwd”。

问题是没有名为“pwd”的可执行文件,我无法执行“echo $ PWD”,因为echo也是一个没有可执行文件的内置命令。

3 个答案:

答案 0 :(得分:22)

如果您只想在c程序中执行shell命令,可以使用

   #include <stdlib.h>

   int system(const char *command);

在你的情况下,

system("pwd");

问题在于,没有一个名为&#34; pwd&#34;的可执行文件。并且我无法执行&#34; echo $ PWD&#34;,因为echo也是一个没有可执行文件的内置命令。

这是什么意思?您应该能够在 / bin /

中找到提到的包
sudo find / -executable -name pwd
sudo find / -executable -name echo

答案 1 :(得分:10)

你应该执行sh -c echo $PWD;通常sh -c将执行shell命令。

(实际上,system(foo)定义为execl("sh", "sh", "-c", foo, NULL),因此适用于shell内置函数。)

如果您只想要PWD的值,请使用getenv

答案 2 :(得分:7)

您可以使用excecl命令

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

如图所示

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

int main (void) {

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

}

第二个参数将是进程表中显示的进程名称。

或者,您可以使用getcwd()函数获取当前工作目录:

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