C close():无效参数

C close() : Invalid argument

抱歉我的英语提前预付,我不是英语母语并且放纵我也是学生。

我正在尝试在 C 中重新创建管道函数,但是当我尝试在 dup2() 函数 close() return 之前关闭管道 fd 时遇到问题一个错误 Ïnvalid argument,我已经检查了我的 fd 是否有效并由 pipe() 创建。

但现在我不明白为什么我的 FD 用作参数在我的子进程中 close() 不被接受

在此之后我的父进程我的函数 close() return 我一个未定义的错误

这是当我 运行 我的程序

时控制台 return 向我发送的内容

close 1 2st cmd: Undefined error: 0

close 1 1st cmd: Invalid argument

pid_t       pid;
t_command   *cmd;
int         pipe_fd[2];

if (pipe(pipe_fd) == -1)
    perror_exit("pipe");

cmd = list->first;
if ((pid = fork()) == -1)
    perror_exit("fork");
if (pid == 0)
{
    /* Code fils */
    cmd = cmd->next;
    if (!close(pipe_fd[1]))
        perror_exit("close 1 1st cmd");
    if (!dup2(pipe_fd[0], STDIN_FILENO))
        perror_exit("dup2 1st cmd");
    if (!close(pipe_fd[0]))
        perror_exit("close 2 1st cmd");
    if (!execve(cmd->path_exec, cmd->tab_cmd, envp))
        perror_exit("execve 1st cmd");
    exit(EXIT_SUCCESS);     
}
/* Code parent */
//waitpid(pid, NULL, 0);
if (!close(pipe_fd[0]))
    perror_exit("close 1 2st cmd");
if (!dup2(pipe_fd[1], STDOUT_FILENO))
    perror_exit("dup2 2st cmd");
if (!close(pipe_fd[1]))
    perror_exit("close 2 2st cmd");
if (!execve(cmd->path_exec, cmd->tab_cmd, envp))
    perror_exit("execve 2st cmd");

来自close manual

Return Value

close() returns zero on success. On error, -1 is returned, and errno is set appropriately.

这意味着您正在检查错误的错误情况。应该是:

if (close(pipe_fd[1]) == -1)

其他 closedup2execve 调用也是如此。