Quiero redirigir la salida de printf a una tubería, pero por alguna razón parece que no funciona. Lo que sí funciona es usar write en su lugar.
este es mi programa
#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <string.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char **argv) { int fd[2]; pipe(fd); pid_t id = fork(); if (id < 0) { fprintf(stderr, "Error while forking #1!"); exit(1); } else if (id == 0) { dup2(fd[0], STDIN_FILENO); close(fd[1]); char msg[200]; read(STDIN_FILENO, msg, 200); fprintf(stderr, "received message: %s", msg); } else { dup2(fd[1], STDOUT_FILENO); close(fd[0]); char msg[] = "Hello from parent!\n"; write(STDOUT_FILENO, msg, strlen(msg)); /* printf("%s",msg); */ while(wait(NULL)>0); } exit(EXIT_SUCCESS); } si reemplazo write con la línea comentada, mi programa simplemente bloquea
Agregue un carácter de nueva línea (\n) a su salida o use fflush() como sugiere Barmar:
fprintf(stderr, "¡Error al bifurcar #1!\n");
o
fprintf(stderr, "¡Error al bifurcar #1!"); fflush(stderr);
por cierto, se recibe, no se recibe;)