使用execv在linux中使用'./'命令

时间:2014-02-19 02:07:43

标签: c linux shell exec fork

我正在linux中构建自己的伪shell。

我正在使用execv来运行通常由linux shell完成的命令。

我有大多数命令正常工作,但我不知道如何使用{。{1}}和'./'命令来运行其他程序。有谁知道怎么做?

任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:1)

./不是命令,它是当前目录的路径。听起来你应该使用execvp(file, argv),而不是execv(path, argv)

更新以添加:更具体地说,如果您的文件名包含'/',execvp不会搜索PATH。这有效,例如:

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

int main(void)
{
    execvp("./hello.sh", NULL);
}

我在当前目录中有hello.sh,用gcc test.c编译代码,运行./a.out并打印“hello world”。 ''不在我的路径中。

答案 1 :(得分:-1)

您可以使用Posix函数:exec(3)。您可以在here找到该手册。

一个建议是记住检查exec(3)的返回值。大多数时候它不起作用,因为你使用的参数不正确。