2014-02-19 130 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