#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int pfds[ 2], i;
size_t pbytrd;
pid_t childpid;
char buffer[ 200];
pipe(pfds);
if((childpid = fork()) == -1)
{
perror("fork error: ");
exit(1);
}
else if(childpid == 0)
{
close(pfds[ 0]);
dup2(pfds[1], 1);
close(pfds[ 1]);
for(i = 0; i < 10; i++)
printf("Hello...");
execlp("xterm","xterm","-e","./sample_a", (char *) 0);
exit(0);
}
else
{
close(pfds[ 1]);
for(; ;)
{
if((pbytrd = read(pfds[ 0], buffer, sizeof(buffer))) == -1)
{
perror(" read error: ");
exit(1);
}
else if(pbytrd == 0)
{
write(fileno(stdout), "Cannot read from pipe...\n", strlen("Cannot read from pipe...\n"));
exit(0);
}
else
{
write(fileno(stdout), "MESSAGE: ", strlen("MESSAGE: "));
write(fileno(stdout), buffer, pbytrd);
}
}
}
return(0);
Mi código es sample_a.c a continuación:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int i;
for(i= 0; i< 10; i++)
write(fileno(stdout), "Hello...", strlen("Hello..."));
return(0);
}
En el código anterior, lo que realmente quiero hacer es: 1) redirección salida desde el proceso secundario a la tubería y que el padre lea desde la tubería e imprima en stdout.
Soy capaz de redirigir la salida del proceso hijo ("printf") de stdout a la tubería, pero no puedo redirigir el proceso hijo de execlp, xterm, salida a la tubería.
¿Alguien me puede ayudar esto?
Acepto, si elimino la parte xterm, funcionará. Es una pregunta de programación que vi en uno de los sitios web de la universidad. El ejercicio consiste en aceptar la entrada del usuario en la ventana xterm y mostrar la salida en xterm, pero cualquier error (perror) debe imprimirse en la ventana de la terminal desde donde se llama. Entonces, ¿no hay forma de que xterm pueda comunicarse nuevamente con la ventana de la terminal? En realidad, esta es una pequeña parte del gran problema (problema de 5-6 páginas). Espero que esto ayude –