Я написал этот фрагмент кода, который должен перенаправить что-то, записанное в STDOUT, функцией в STDIN, чтобы это могло быть прочитано другой функцией. Я не могу получить доступ к этим функциям, так что это единственный способ, которым я могу их использовать.
mpz_fput(stdout, c)
является одной из этих функций. Он просто печатает на STDOUT что-то, содержащееся в структуре данных c.
Теперь все работало нормально при отладке, как и в следующем коде: printf();
, за которым следует fflush(stdout);
(необходим для печати отладочных сообщений).
Теперь, когда я удалил эти две строки, я заметил (используя gdb), что этот код бездействует в функции read()
(последняя строка этого фрагмента кода)
char buffer[BUFSIZ] = "";
int out_pipe[2];
int in_pipe[2];
int saved_stdout;
int saved_stdin;
int errno;
// REDIRECT STDIN
saved_stdin = dup(STDIN_FILENO); /* save stdin for later */
if(errno= pipe(in_pipe) != 0 ) { /* make a pipe */
printf("\n%s",strerror(errno));
exit(1);
}
close(STDIN_FILENO);
dup2(in_pipe[0], STDIN_FILENO); /* redirect pipe to stdin */
// REDIRECT STDOUT
saved_stdout = dup(STDOUT_FILENO); /* save stdout for display later */
if(errno= pipe(out_pipe) != 0 ) { /* make a pipe */
printf("\n%s",strerror(errno));
exit(1);
}
dup2(out_pipe[1], STDOUT_FILENO); /* redirect stdout to the pipe */
close(out_pipe[1]);
mpz_fput(stdout,c); // put c on stdout
read(out_pipe[0], buffer, BUFSIZ); // read c from stdout pipe into buffer
есть идеи, почему это так?