0

我目前正在用 C 编写自己的终端。我发现,我可以使用 exec() 方法的多种变体。它的简单出现导致我使用 execv():

int main(int argc , char* argv[]){
    char* dir = getcwd(NULL, 0);
    char* command[] = {"echo", "Hello", "World", "!!!", NULL};
    execv(dir, command);
}

据我了解,这应该有效。它正在编译,但没有任何反应。

4

1 回答 1

1

to的path参数execv应该是您要运行的可执行文件的路径规范,而不仅仅是getcwd. 从手册页:

这些函数的初始参数是要执行的文件的路径名。

换句话说,您正在寻找类似的东西:

execv ("/bin/echo", command);

您当前拥有的代码正在尝试运行您当前的目录,这不太可能结束,如果您检查返回值,您可能已经注意到execverrno轻推,轻推,眨眼,眨眼:-)

至于对其他程序做什么,您只需将它们的完整路径名替换为/bin/echo.

您还应该知道这exec是一个函数,每个函数都有细微的变化。

有些允许传递环境,有些会自动搜索可执行文件的路径(取决于给定的名称),有些使用变量参数列表而不是数组。如果您想使用自动路径搜索,您会查看execvp而不是execv,那么您不必担心可执行文件的位置。

于 2013-06-10T13:58:57.387 回答