Tareas programadas en C ¿Como?

Iniciado por dgg006, 15 Junio 2011, 16:44 PM

0 Miembros y 3 Visitantes están viendo este tema.

dgg006

Hola. Otra ves molestando por acá...

Lo que ahora necesito, puede ser algo útil para muchos, no se como explicarlo bien, así que les cuento lo que debería hacer...

"Es un programa en C, para planificar tareas por horario.
Tendría que leer en un TXT, un hora X (ej:15:22)
Cuando la hora del sistema, sea igual que esa hora X, debe escribir un valor en otro TXT y dejar en blanco el TXT anterior"

Para orientarlos a lo que va dedicado este código, les cuento:
Estoy diseñando un sistema domotico, que a través de internet controla unos relay conectados al paralelo.
La pagina (en PHP) crea un TXT con un 0 o un 1
Un programa en C, lee ese txt, y dependiendo si es un 0 o un 1, apaga o enciende el relay.
Todo eso ya esta echo y funcionando, pero quiero agregarle un estilo de planificación, entonces a la hora elegida, se escribe un 0 o un 1 en el TXT.

Espero su ayuda

Died

No he leído a fondo, pero para programar tareas sencillamente coge la hora en el formato que necesites y compárala con lo que quieres.
Un saludo. Sagrini

dgg006


ksiksi

No sé si entendi bien, pero la idea seria hacer un createprocess con un bucle para mantenerlo vivo y usar localtime para averiguar la hora: http://c.conclase.net/librerias/?ansifun=localtime#inicio
Eso si estas en windows, pq createprocess es una api de windows.
Sin embargo, sospecho que debe haber una forma mas facil de hacerlo.

dgg006

Creo que no lo aclare...
Es bajo Linux.. (Ubuntu Server)

Died


#include <string.h>
#include <stdio.h>
#include <time.h>

char buffer [40];

char *times ()
{
time_t now = time (0);
struct tm *ahora;
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y", ahora);
return (char *) buffer;
}

int main ()
{
if (strcmp (times (), "15/06/2011") == 0) printf ("1");
else printf ("0");

return 0;
}


$ gcc -o code code.c
$ ./code
1
$


La próxima vez mira algo en Google :)
Un saludo. Sagrini

dgg006

Lo voy a probar y les cuento..
Igual te cuento que busque, pero google te ayuda cuando sabes que buscas, y yo no estoy seguro de que es

dakomt

#7
jeje recuerdo tu proyecto.. me alegro de que hayas progresado  :D

El problema de hacerlo de esa forma es que desde el programa en C deberás estar todo el rato comprobando la hora en un bucle... A menos que te compliques la vida usando algun manejador de señales o algo similar (ejemplo--> http://linux.die.net/man/3/sem_wait ) tu programa se volverá muy ineficiente.

Mi consejo..., ya que vas a usar un sistema Linux, es que te ayudes de los comandos del sistema, por ejemplo "at" o "crontab" y los llames desde el programa en C con los parametros correspondientes (fecha de ejecución,comando a ejecutar, etc)

PD: es más.. ya que tienes un "sistema" domótico compuesto de diversos programas también podrías contemplar la posibilidad de usar un "script en bash" directamente para gestionar la programacion de tareas (invocando a alguno de los comandos que te he mencionado anteriormente) y olvidarte de C. Como tu lo veas más facil  ;)

dgg006

Hola dakomt.
Me alegro que recuerdes mi proyecto, y si,  mi bebe está creciendo a pasos agigantados  ;D

Entiendo lo que dicen sobre la ineficiencia de lo que busco. Voy a buscar sobre los comandos que me pasaste,.


Para Died:
Hice un par de modificaciones en el codigo que me pasaste, y casi funciona.
#include <string.h>
#include <stdio.h>
#include <time.h>

char buffer [40];

char *times ()
{
time_t now = time (0);
struct tm *ahora;
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%H:%M", ahora);
return (char *) buffer;
}

int main ()
{
if (strcmp (times (), "20:45") == 0)
      printf ("1");
else
      printf ("0");

return 0;
}


Donde dice "20:45" es donde se ingresa la hora que quieres.
La pregunta es, si tengo la hora en un TXT, que comando uso???
Ya he trabajado con TXT pero este me confundió

Died

Usa las funciones fopen (), fclose (), fgets (), etc...
Un saludo. Sagrini