basura al pasar por un pipe

oitoungage
28 de Diciembre del 2008
Buenas! A ver si me podéis hechar una mano con esto, ya que llevo horas intentandolo y no me sale. Lo que quiero hacer es sencillo, Un codigo que imprima lo que hay en un fichero por pantalla utilizando un pipe. Con printf he visto que lo hace todo bien pero al imprimirlo por pantalla imprime por cada linea un caracter de basura (es decir, caracter tipo �)
El archivo se llama materiales.txt y contiene estas lineas:
111
222
333

Trabajo con la terminal de ubuntu con el comando gcc para compilar el fichero que se llama master.c
El codigo es el siguiente:

[code]
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

main(){
int p[2], pid, n, variable;
FILE * fentrada;

if ((fentrada = fopen("materiales.txt", "r")) == NULL){
printf("No se ha podido abrir el fichero materiales.txtn");
return (0);
}

pipe(p);

if ((pid=fork())==0){

close(p[1]);
close(0);
dup(p[0]);
close(p[0]);

while((n = (read(0, &variable, sizeof(variable)))) != 0){
write(1, &variable, sizeof(variable));
}

return(0);
}

while((n = (fscanf(fentrada,"%dn", &variable))) >= 0){
write(p[1], &variable, sizeof(variable));
}

fclose(fentrada);
}
[/code]

Si alguien me puede ayudar le estaré muy agradecido.
Saludos.