2010-12-03 94 views
0

如何從C代碼執行shell?從C代碼控制shell?

我的外殼被放置在/bin/sh

繼似乎沒有爲我

system("/bin/sh"); 
exec("/bin/sh"); 
+0

沒有工作?你能詳細說明一下嗎?而且,你使用的是哪一個exec系列功能? – vpit3833 2010-12-03 07:47:08

回答

2

工作,也許你需要告訴shell應該是互動的:

system("/bin/sh -i"); 

然而,我相信你原來的system()調用也應該產生了一個shell提示符。

兩種表示法(使用和不使用「-i」)在此程序給我一個殼提示(返回到前殼通過鍵入「退出」和RETURN控制-d):

#include <stdlib.h> 
int main(void) 
{ 
    system("/bin/sh -i"); 
    return 0; 
} 
1

這個程序按預期工作對我來說:

int main() 
{ 
    int ret = system("/bin/sh"); 
    printf ("Shell returned %d\n", ret); 
    return 0; 
} 

使用-i導致某種形式的重定向問題,一切只要我鍵入產生輸出命令掛起。

系統()exec()之間存在重要差異。 系統()實際上是相同的/bin/sh -c yourCommand在命令行上,所以system("/bin/sh")相同

/bin/sh -c /bin/sh 

這就是爲什麼它很少使用,因爲執行您想要的命令,首先開始的不必要的shell進程。 )

int main() 
{ 
    int ret = exec("/bin/sh"); 
    printf ("Shell returned %d\n", ret); 
    return 0; 
} 

的printf(一切將永遠不會被因爲執行後:

EXEC()導致整個過程圖像由指定的命令,所以如果我寫了更換整個過程轉換爲/bin/sh的實例。運行子命令的正確方法是分叉,然後在子中執行,然後在父代中等待。