2010-12-03 7 views
0

Cコードからシェルを実行するにはどうすればよいですか?Cコードからシェルを制御できますか?

私のシェルはたぶん、あなたはそれが対話する必要がありますシェルを指示する必要があり

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

動作しませんでしたか?あなたはそれについて詳述できますか?そして、どのexecファミリーの関数を使ったのですか? – vpit3833

+0

どうしますか?詳細はplease – Drakosha

+0

実際に私はそれらのコマンドを使用せずに私のCコードを実行すると、私のコードは、(私は使用しているCアプリケーションの性質のため)の一種の待機状態になります。私は待機状態に入る行の前にこれらのコマンドを試しましたが、シェルプロンプトが表示されません。 – baltoro

答えて

2

私のために動作していないようでした後/bin/sh

に配置されています

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

しかし、私はあなたの元のsystem()コールがシェルプロンプトを生成したはずだと信じています。

:このプログラムで

両方表記(持つと「-i」せず)は、私のシェルプロンプト(「出口」を入力して、前のシェルに戻るとRETURNまたはコントロール-D)を得私にとっては予想通り、このプログラムの動作

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

:-iを使用して

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

は、リダイレクトの問題のいくつかの並べ替えを引き起こし、すべてのものは、すぐに私は出力を生成し、コマンドを入力すると、ハングアップします。

システム()exec()の間に重要な違いがあります。あなたがしたいコマンドが実行されているため、最初の不要を開始することにより、

それはほとんど使用されていない理由です
/bin/sh -c /bin/sh 

と同じであるsystem("/bin/sh")ようが効果的にコマンドライン上/bin/sh -c yourCommandと同じである()システム、シェルプロセス。私が書いていたので、もしプロセス全体のイメージが指定されたコマンドに置き換えることになり

のexec():

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

のprintf()、すべてそれがあるため、実行されていないだろう後プロセス全体が/bin/shのインスタンスに変換されます。子コマンドを実行する適切な方法は、子をフォークしてexecし、親を待つことです。

関連する問題