2013-02-10 48 views
1

我遇到了此execve命令的問題。我可以用它在我的程序中運行大多數其他命令,但是如果我嘗試像man ls或其他東西那樣得到此錯誤。execve error當調用execve(man,args,env)

man: can't execute pager: No such file or directory 
man: command exited with status 255: LESS=-ix8RmPm Manual page ls(1) ?ltline  %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$PM Manual page ls(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$ MAN_PN=ls(1) pager -s 

這裏是我怎樣,我稱之爲:

execve(cmdPath, args, env); 

其中cmdPath是路徑(在這種情況下/usr/bin/manargschar*其中args[0] = manargs[1] = ls env是我env*[]從傳遞主要。

任何幫助將不勝感激。我在這裏死去。

+0

可以運行'男人ls'正確地從您用來啓動程序相同的殼呢? – us2012 2013-02-10 05:23:52

+0

耶只好。 – 2013-02-10 05:24:53

+1

你可以用'args [0] = ls' – Ganesh 2013-02-10 05:46:18

回答

3

Null終止您傳遞給execve的參數。像

char *args[3]; 
// other args.. 
args[2] = (char*) 0; 

這是未定義的行爲,否則這可能是爲什麼它有時在過去有效,這次你不走運。

這工作:

int main(int argc, char *argv[], char *env[]) 
{ 
    char *args[3]; 

    args[0] = "man"; 
    args[1] = "ls"; 
    args[2] = (char*) 0; 

    execve("/usr/bin/man", args, env); 
} 
+0

以及只有當我設置我的env [0] = NULL時,它纔有效。 - 即使如此,在我看到手冊頁之前,它給了我一個警告,說明終端沒有正確行事。但是我注意到,我的env []和我在提示符中鍵入env不一樣所以如果我查看我的PATH變量,通常我有8個不同的路徑。但在我的c程序中,如果我打印env變量,則只有一個PATH。 – 2013-02-10 13:07:22

+0

哦,男孩。我發現了錯誤。我剛剛進入並硬編碼的env [15]是字符串「PATH =/usr/bin:........」getenv(「PATH」)給我的所有東西,並且一切都完美無缺。但是爲什麼我的env [15]與我的getenv(「PATH」)有所不同?我感到很困惑。 – 2013-02-10 13:22:51