35

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

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

4

3 回答 3

45

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

   #include <stdlib.h>

   int system(const char *command);

在你的情况下,

system("pwd");

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

你这是什么意思?您应该能够在/bin/中找到提到的包

sudo find / -executable -name pwd
sudo find / -executable -name echo
于 2013-10-06T14:05:15.683 回答
22

你应该执行sh -c echo $PWD;一般sh -c会执行shell命令。

(事实上​​,system(foo)被定义为execl("sh", "sh", "-c", foo, NULL)并因此适用于 shell 内置程序。)

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

于 2013-10-06T13:03:56.600 回答
11

您可以使用 execl() 函数:

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;
}
于 2013-10-06T13:29:36.667 回答