Linux - Por qué se me llena la pantalla de basura??

 
Vista:

Por qué se me llena la pantalla de basura??

Publicado por BondJames Bond (4 intervenciones) el 26/09/2007 23:07:20
Por qué al ejecutar este programa se me llena la pantalla de caracteres basura???

#include<fcntl.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

void error (char *m) {
write(2,m,strlen(m));
write(2,"\n",1);
write(2,strerror(errno),strlen(strerror(errno)));
exit(1);
}

int main() {

int data1, data2, resultado, dato1, dato2,resul, contamulti;
long index1, index2;

if ((data1 = open("data1.dat",O_RDONLY)) < 0)
error("Fallo al abrir data1.dat");
if ((data2= open("data2.dat",O_RDONLY)) < 0)
error("Fallo al abrir data2.dat");
if ((resultado= open("resultado.dat",O_WRONLY|O_CREAT,0600)) < 0) /*contendrá la multiplicación de los registros */
/*de data1 y data2*/
error("Fallo al crear resultado.dat");


index1=lseek(data1,1,SEEK_SET); /*me posiciono al principio del primer fichero*/
read(data1,&dato1,sizeof(dato1));
index1 ++; /*avanzo al siguiente registro*/
index2 = lseek(data2,0,SEEK_END); /*me posiciono al final del segundo fichero para leerlo al revés*/
read(data2,&dato2,sizeof(dato2));
index2 --; /*retrocedo al siguiente registro*/

while ((index1 >=1) && (index2 >=0)) {
resul = dato1*dato2; /*multiplico los registros leídos*/
contamulti ++; /*cuento las multiplicaciones realizadas*/
write(resultado,&resul,sizeof(resul));
read(data1,&dato1,sizeof(dato1));
index1 ++;
read(data2,&dato2,sizeof(dato2));
index2 --;
}
write(2,"El número de multiplicaciones es: ",contamulti);
close(data1);
close(data2);
close(resultado);
}

Muchas gracias de antemano!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Por qué se me llena la pantalla de basura??

Publicado por Tom (482 intervenciones) el 27/09/2007 11:14:08
Fácil. Porque estás escribiendo "basura".

write(resultado,&resul,sizeof(resul));

resul es un int ¿no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por qué se me llena la pantalla de basura??

Publicado por BondJamesBond (4 intervenciones) el 27/09/2007 19:44:40
¿Y qué debo escribir? Los otros dos ficheros son de enteros, y se supone que debo escribir enteros en el de resultado, no?

Gracias por la respuesta!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por qué se me llena la pantalla de basura??

Publicado por Tom (482 intervenciones) el 27/09/2007 21:25:35
printf("%d\n", resul);

No estaría de más aprender qué demonios es eso de los códigos de caracteres ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por qué se me llena la pantalla de basura??

Publicado por BondJamesBond (4 intervenciones) el 28/09/2007 13:07:37
Gracias!! Ya lo sabía, pero mi problema es que no puedo usar el printf ni ninguna función de entrada/salida estándar, sólamente puedo usar la llamada al sistema write. Tendría que especificar:

write(resultado,int(&resul),sizeof(resul)); ????

De nuevo gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por qué se me llena la pantalla de basura??

Publicado por Tom (482 intervenciones) el 28/09/2007 15:12:16
Pues tendrás que convertir cada dígito del resultado en un valor ascii "imprimible" y escribir uno a uno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar