Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 1 Octubre 2012, 05:39 am



Título: problema con read() y open() C
Publicado por: soyloqbuskas en 1 Octubre 2012, 05:39 am
¡Buenas a todos!

Tengo un problemilla con el open y el read. Este es mi codigo.
Código
  1. char * leeFichero(char * path){
  2.        char * datos="";
  3.        int f=0;
  4.        int fileSize=100;
  5.  
  6.        f=open(path, O_RDONLY);
  7.        if(!f) return 0;
  8.        read(f,datos,fileSize);
  9.        printf("datos: %s\n",datos);
  10.  
  11.        return datos;
  12. }
  13.  

El caso es que el printf(datos) me sale vacio a pesar de que le paso un path correcto de un fichero con datos...

Y otra cosa mas, ¿como puedo calcular el tamaño del fichero? porque he puesto fileSize=100 porque no sabia calcularlo xD

Gracias, un saludo.


Título: Re: problema con read() y open() C
Publicado por: rir3760 en 1 Octubre 2012, 07:35 am
El problema se debe a la sentencia:
Código
  1. char * datos="";
En ella declaras el puntero "datos" que utilizaras en la llamada a "read", el problema se debe a que ese puntero:
1) Apunta a una cadena literal y estas no deben modificarse.
2) Aun cuando fuera posible el array solo tiene capacidad para un elemento (el '\0').

Si vas a leer cien caracteres puedes simplemente declarar un array con esa capacidad y pasarlo a la función.

Y para conocer el tamaño en bytes del archivo si estas utilizando Linux (como parece ser el caso) puedes utilizar la función stat (http://linux.die.net/man/2/stat).

Un saludo


Título: Re: problema con read() y open() C
Publicado por: leosansan en 1 Octubre 2012, 15:52 pm
Cita de: soyloqbuskas link=topic=372382.msg1788640#msg1788640

Y otra cosa mas, ¿como puedo calcular el tamaño del fichero? porque he puesto fileSize=100 porque no sabia calcularlo xD
Citar
Prueba con:
Código
  1. fseek(fichero, 0L, SEEK_END);
  2.    printf("prueba.txt ocupa %d bytes", ftell(fichero));
Saludos!.


Título: Re: problema con read() y open() C
Publicado por: soyloqbuskas en 1 Octubre 2012, 22:20 pm
!!!Muchas gracias a todos por las respuestas!!!

Un saludo.