This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub kmyk/competitive-programming-library
pid_t popen2(const char *command, int *fd_r, int *fd_w) {
constexpr int READ = 0;
constexpr int WRITE = 1;
int p_stdin[2], p_stdout[2];
if (pipe(p_stdin) != 0 or pipe(p_stdout) != 0) return -1;
pid_t pid = fork();
if (pid < 0) return -1;
if (pid == 0) {
close(p_stdin[WRITE]);
dup2(p_stdin[READ], STDIN_FILENO);
close(p_stdout[READ]);
dup2(p_stdout[WRITE], STDOUT_FILENO);
execl("/bin/sh", "sh", "-c", command, NULL);
exit(1);
} else {
if (fd_r == NULL) {
close(p_stdin[WRITE]);
} else {
*fd_r = p_stdin[WRITE];
}
if (fd_w == NULL) {
close(p_stdout[READ]);
} else {
*fd_w = p_stdout[READ];
}
return pid;
}
}
#line 1 "old/popen2.inc.cpp"
pid_t popen2(const char *command, int *fd_r, int *fd_w) {
constexpr int READ = 0;
constexpr int WRITE = 1;
int p_stdin[2], p_stdout[2];
if (pipe(p_stdin) != 0 or pipe(p_stdout) != 0) return -1;
pid_t pid = fork();
if (pid < 0) return -1;
if (pid == 0) {
close(p_stdin[WRITE]);
dup2(p_stdin[READ], STDIN_FILENO);
close(p_stdout[READ]);
dup2(p_stdout[WRITE], STDOUT_FILENO);
execl("/bin/sh", "sh", "-c", command, NULL);
exit(1);
} else {
if (fd_r == NULL) {
close(p_stdin[WRITE]);
} else {
*fd_r = p_stdin[WRITE];
}
if (fd_w == NULL) {
close(p_stdout[READ]);
} else {
*fd_w = p_stdout[READ];
}
return pid;
}
}