内部および外部コマンドを処理するシェルを作成しようとしています。内部コマンドと外部コマンドを一度に 1 つずつ取得できます。
私の質問は、「ls -l | grep lib | wc -l」のようなコマンドを実行する方法です。
私は fork() を使用しており、char*[] で execv() を介して外部コマンドを渡しています。
これを機能させる方法について何か考えはありますか?pipe() か何かを使用していると思いますが、よくわかりません。
質問の 2 番目の部分: I/O リダイレクトの処理はどうですか? 誰かが役立つ場所を教えてもらえますか?
編集 これまでのところ、@Alex W は私のヒーローです。ただし、pipe() および dup2() コマンドは初めてなので、それぞれの呼び出しと変数が何のためにあるのか少しためらっています。
単一の外部コマンドを処理するコードを次に示します (例 = "ls -l -a"):
pid_t pid;
pid = fork();
if (pid < 0)
{
cout << "Fork failed." << endl;
}
else if (pid == 0)
{
execvp(exec_args[0], exec_args); //exec_args is a char*[] where
_exit (EXIT_FAILURE); //exec_args[0] contains "/bin/ls"
} //[1]="ls" and [2]="-l" [3]="-a"
else
{
int status;
waitpid(pid, &status, 0);
}
break;