Execv为自己的终端

时间:2013-06-10 13:48:56

标签: c terminal execv

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

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

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

1 个答案:

答案 0 :(得分:1)

path的{​​{1}}参数应该是您要运行的可执行文件的路径规范,而不仅仅是execv返回的目录。从联机帮助页:

  

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

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

getcwd

您目前拥有的代码是尝试运行当前目录,这种情况不太可能结束,如果您从execv ("/bin/echo", command); execv检查了返回值,您可能会注意到这一点:nudge ,轻推,眨眼,眨眼: - )

就其他程序的操作而言,您只需将其errno的完整路径名替换为。

您还应该知道/bin/echofamily of functions,每个都有轻微变化。

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