Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mark182 en 10 Marzo 2011, 15:37 pm



Título: Implementacion de bucle infinito
Publicado por: mark182 en 10 Marzo 2011, 15:37 pm
Buenos dias,

Estoy pensando en hacer un pequeño soft en C que lee el contenido de un archivo de texto si, y solo si, el archivo existe o tiene contenido nuevo. Pero no se si la forma de implementarlo es la correcta.
Lo que estaba pensando seria hacer un while preguntando por la existencia del archivo, si existe leerlo y eliminarlo. De esta manera se quedaria en bucle infinito esperando que exista el archivo.

Estoy en la forma correcta?

PD: dicho archivo se genera automaticamente cada 5 seg.

Muchas gracias.


Título: Re: Implementacion de bucle infinito
Publicado por: Akai en 10 Marzo 2011, 19:17 pm
Código
  1. while(1){
  2. f=fopen(fichero,"algo"); //en algo --> lectura y escritura, no lo recuerdo ahora
  3. if(f){ // existe el fichero
  4. haz_lo_que_sea(f);
  5. borra_el_contenido(f);
  6. fclose(f);
  7. }
  8. //no necesitas cerrar, en principio, un fichero que no se ha podido abrir
  9. }

Eso sería la forma "literal" del bucle infinito y hacer lo que sea si existe. Me parece que para borrar el fichero tendrías que recurrir a funciones de sistema.


Título: Re: Implementacion de bucle infinito
Publicado por: Garfield07 en 12 Marzo 2011, 11:07 am
"algo" sería en tu caso "a+".

PD: No estaría mal cerrarlo de todos modos...
Un saludo! Sagrini


Título: Re: Implementacion de bucle infinito
Publicado por: Akai en 12 Marzo 2011, 11:33 am
PD: No estaría mal cerrarlo de todos modos...

No, no lo necesitas. fopen (y por debajo open) te devuelven un puntero a fichero (o descriptor de fichero) si dicho fichero existe y lo has podido abrir. Si no lo has podido abrir, no necesitas cerrarlo.

Para este caso, posiblemente te interese incluso trabajar con funciones de sistema a bajo nivel, vease open (que no fopen) de forma que lo abras pero no lo crees (cosa que no se si se puede hacer con fopen (más que nada porque no tengo la referencia ahora mismo en la cabeza))