Cコードからシェルを実行するにはどうすればよいですか?Cコードからシェルを制御できますか?
私のシェルはたぶん、あなたはそれが対話する必要がありますシェルを指示する必要があり
system("/bin/sh");
exec("/bin/sh");
Cコードからシェルを実行するにはどうすればよいですか?Cコードからシェルを制御できますか?
私のシェルはたぶん、あなたはそれが対話する必要がありますシェルを指示する必要があり
system("/bin/sh");
exec("/bin/sh");
私のために動作していないようでした後/bin/sh
に配置されています
system("/bin/sh -i");
しかし、私はあなたの元のsystem()
コールがシェルプロンプトを生成したはずだと信じています。
両方表記(持つと「-i」せず)は、私のシェルプロンプト(「出口」を入力して、前のシェルに戻るとRETURNまたはコントロール-D)を得私にとっては予想通り、このプログラムの動作
#include <stdlib.h>
int main(void)
{
system("/bin/sh -i");
return 0;
}
:-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し、親を待つことです。
動作しませんでしたか?あなたはそれについて詳述できますか?そして、どのexecファミリーの関数を使ったのですか? – vpit3833
どうしますか?詳細はplease – Drakosha
実際に私はそれらのコマンドを使用せずに私のCコードを実行すると、私のコードは、(私は使用しているCアプリケーションの性質のため)の一種の待機状態になります。私は待機状態に入る行の前にこれらのコマンドを試しましたが、シェルプロンプトが表示されません。 – baltoro