elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con read() y open() C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con read() y open() C  (Leído 2,145 veces)
soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
problema con read() y open() C
« 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.


En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con read() y open() C
« Respuesta #1 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.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con read() y open() C
« Respuesta #2 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!.
« Última modificación: 1 Octubre 2012, 15:56 pm por leosansan » En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: problema con read() y open() C
« Respuesta #3 en: 1 Octubre 2012, 22:20 pm »

!!!Muchas gracias a todos por las respuestas!!!

Un saludo.
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema en OleDb Open
.NET (C#, VB.NET, ASP)
1mpuls0 0 2,009 Último mensaje 1 Mayo 2014, 01:33 am
por 1mpuls0
Problema con read/write system calls
Programación C/C++
xaps 5 2,452 Último mensaje 8 Junio 2014, 15:28 pm
por Eternal Idol
Pendrive Modo Read Only
Hardware
skarih 0 1,944 Último mensaje 4 Octubre 2015, 00:07 am
por skarih
comando read
Scripting
puchi 6 3,813 Último mensaje 28 Diciembre 2016, 20:59 pm
por puchi
Por que read no funciona con system?
Programación C/C++
Lieutenant McFarley 4 3,137 Último mensaje 24 Marzo 2022, 23:45 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines