2014-02-19 63 views
0

我正在linux中构建自己的伪shell。使用execv在linux中使用'./'命令

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

我有大多数的命令工作,但我不知道如何使用'./'命令使用execv来运行其他程序。有谁知道如何做到这一点?

任何建议都会有所帮助。

+1

'。/'不是一个命令,而是一个相对文件路径? – isedev

回答

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”。 ''不在我的PATH中。

+0

'execvp'将在'PATH'环境变量中列出的目录中搜索'file'。如果'file'位于当前目录并且当前目录不在'PATH'中,它根本无济于事。 – isedev

+0

谢谢,一旦我意识到./对命令不重要,我只是调整了我的字符串只有它后面的程序名称,然后execv函数完美工作。 –

+0

如果文件名包含斜线,则不适用。更新为清晰。 – bazzargh

-1

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

一个建议是记住检查exec(3)的返回值。大部分时间它不会工作,因为您使用的参数不正确。

+0

'exec'和'execv'提供了相同的功能,但具有不同的调用签名(前者需要可变数量的'const char *'参数,后者需要'const char *'数组)。使用'exec'将无助于OP。 – isedev