• Lunes 30 de Marzo de 2020, 08:12

Autor Tema:  basura al pasar por un pipe  (Leído 342 veces)

oitoungage

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
basura al pasar por un pipe
« en: Domingo 28 de Diciembre de 2008, 20:19 »
0
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:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <unistd.h>
  6. #include <fcntl.h>
  7.  
  8. main(){
  9.     int p[2], pid, n, variable;
  10.     FILE * fentrada;
  11.    
  12.     if ((fentrada = fopen("materiales.txt", "r")) == NULL){
  13.         printf("No se ha podido abrir el fichero materiales.txtn");
  14.         return (0);
  15.     }
  16.  
  17.     pipe(p);
  18.  
  19.     if ((pid=fork())==0){
  20.        
  21.         close(p[1]);
  22.         close(0);
  23.         dup(p[0]);
  24.         close(p[0]);
  25.        
  26.         while((n = (read(0, &variable, sizeof(variable)))) != 0){
  27.             write(1, &variable, sizeof(variable));
  28.         }
  29.  
  30.         return(0);
  31.     }
  32.  
  33.     while((n = (fscanf(fentrada,"%dn", &variable))) >= 0){
  34.         write(p[1], &variable, sizeof(variable));
  35.     }
  36.    
  37.     fclose(fentrada);
  38. }
  39.  
  40.  

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