Test Foro de elhacker.net SMF 2.1

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.

char * leeFichero(char * path){
        char * datos="";
        int f=0;
        int fileSize=100;
       
        f=open(path, O_RDONLY);
        if(!f) return 0;
        read(f,datos,fileSize);
        printf("datos: %s\n",datos);

        return datos;
}


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:
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
CitarPrueba con:
fseek(fichero, 0L, SEEK_END);
   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.