2

友達と私はシェルをコーディングしようとしています。私の問題は、「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);
}

私は答えを得ました、ありがとう:)。

4

1 に答える 1