4

exec ファミリを使用する必要があるプロジェクトがあります。私のプロジェクトは、インタラクティブなシェルの作成で構成されています。シェルは、cd、ls、echo などのいくつかの基本的なコマンドを実装します。私は exec の使用法を調査してきましたが、有用なサイトが見つかりませんでした。提案されたリンクは役に立ちます。

int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);

この操作の出力を画面に表示するにはどうすればよいですか?

4

2 に答える 2

4

やっている

int fd = 1;
dup(fd);
close(fd);

画面への出力を取得します。

于 2008-09-28T22:19:43.877 に答える
2

あなたが書いたコードは、他に何もしない単純なテスト プログラムで動作します。execl を呼び出すと、プロセスはすべての古いファイル ハンドルを保持することに注意してください。したがって、execl を呼び出したときの stdout が何であれ、新しいバイナリがロードされるときは同じになります。出力を端末に送るだけの場合は、stdout が端末に送信されることを確認してください。

別のプログラムで I/O を実行したい場合は、popen が適しています (mgb が述べたように)。新しいプロセスをフォークし、配管をセットアップし、exec のバリアントを呼び出し、通信に使用できるファイル ハンドルを返します。

于 2008-09-28T22:25:17.967 に答える