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");
Return Value
close() returns zero on success. On error, -1 is returned, and errno is set appropriately.
这意味着您正在检查错误的错误情况。应该是:
if (close(pipe_fd[1]) == -1)
其他 close
、dup2
和 execve
调用也是如此。
抱歉我的英语提前预付,我不是英语母语并且放纵我也是学生。
我正在尝试在 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");
Return Value
close() returns zero on success. On error, -1 is returned, and errno is set appropriately.
这意味着您正在检查错误的错误情况。应该是:
if (close(pipe_fd[1]) == -1)
其他 close
、dup2
和 execve
调用也是如此。