友達と私はシェルをコーディングしようとしています。私の問題は、「cat」コマンドを実行してから ^C で STDIN を終了すると、プログラムが waitpid で segfault になり、プログラムを終了することです... (もちろん、したくないことです!)
すべてのコマンドは完全に機能しており、他に問題はありません...これらの(大きな)問題を解決する方法について尋ねているだけです。
助けてくれてありがとう!すぐ下のコマンドを実行するための私のコードを参照してください。
static int cmd_executeit(char **env, t_shell *shell, char *path)
{
pid_t forked;
int ret;
ret = 0;
if ((forked = fork()) == FAILURE)
return (bi_error(shell, "I can't fork with you :("));
if (forked == SUCCESS)
{
if (execve(path, shell->cmd, env) == FAILURE)
return (bi_error(shell, "Execution of the command failed"));
}
else
{
if (waitpid(forked, &ret, 0) < 0)
return (bi_error(shell, "I can't wait for this command. Sorry."));
}
if (WIFEXITED(ret) && (WEXITSTATUS(ret) == SUCCESS))
return (SUCCESS);
return (FAILURE);
}
私は答えを得ました、ありがとう:)。