我目前正在C写自己的终端。 我发现,exec()方法有多种变体,我可以使用。 它的简单出现导致我使用execv():
int main(int argc , char* argv[]){
char* dir = getcwd(NULL, 0);
char* command[] = {"echo", "Hello", "World", "!!!", NULL};
execv(dir, command);
}
根据我的理解,这应该有效。它正在编译,但没有任何反应。
答案 0 :(得分:1)
path
的{{1}}参数应该是您要运行的可执行文件的路径规范,而不仅仅是execv
返回的目录。从联机帮助页:
这些函数的初始参数是要执行的文件的路径名。
换句话说,你正在寻找类似的东西:
getcwd
您目前拥有的代码是尝试运行当前目录,这种情况不太可能结束,如果您从execv ("/bin/echo", command);
和execv
检查了返回值,您可能会注意到这一点:nudge ,轻推,眨眼,眨眼: - )
就其他程序的操作而言,您只需将其errno
的完整路径名替换为。
您还应该知道/bin/echo
是family of functions,每个都有轻微变化。
有些允许传递环境,有些会自动搜索可执行文件的路径(取决于给定的名称),有些使用变量参数列表而不是数组。如果您想使用自动路径搜索,则可以查看exec
而不是execvp
,然后您不必担心可执行文件的位置。