Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/10/2010, 08:37
Trovaz
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: llamar a una funcion cada x segundos y return donde estaba

Bueno lo primero que necesitas es saber como utilizar le llamada al sistema fork() para crear procesos hijos, y lo segundo es un temporizador, esto lo puedes hacer ayudandote de la señal SIGALRM, aqui te pongo un ejemplo muy sencillo de como hacer estas cosas.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5. #include <signal.h>
  6.  
  7.  
  8. int ppid;
  9.  
  10.  
  11.  
  12. void funcionSenial(int sig);
  13.  
  14. int main(){
  15.   ppid = getpid();
  16.   int pid;
  17.   char opcion;
  18.   signal(SIGALRM, funcionSenial);
  19.   if((pid = fork()) == -1)//Trantando de crear proceso hijo
  20.     return 1;
  21.   if(pid == 0){
  22.     /*Proceso del hijo*/
  23.     printf("PROCESO HIJO CON PID: %i\n", getpid());
  24.     alarm(1);
  25.     while(1);
  26.   }
  27.   else{
  28.     /*Proceso padre*/
  29.     printf("PROCESO PADRE CON PID: %i\n", getpid());
  30.     do{
  31.       printf("Desea Salir[S/N]? ");
  32.       scanf("%c", &opcion);
  33.       while(getchar() != '\n');
  34.     }while(opcion != 'S');
  35.     kill(pid, 9);
  36.   }
  37.   return 0;
  38. }
  39.  
  40.  
  41. void funcionSenial(int sig){
  42.   static int contador;
  43.   contador++;
  44.   printf("contador: %i\n", contador);
  45.   if(contador == 5){
  46.     printf("Imprime esto cada 5 segs\n");
  47.     contador = (contador + 1) % 6;
  48.   }
  49.   alarm(1);
  50. }


Rapidamente te explico un poco, fork() como habia dicho, es una llamada al sistema que crea un proceso hijo a partir del proceso que lo llama, esta funcion devuelve un pid_t (que puedes almacenar en un entero pero siempre es mejor usar el tipo pid_t), 0 o -1. En esta caso almaceno esto en la variable pid. Al crear el proceso hijo, a ambos procesos (padre e hijo) se les devuelve un valor distinto, por lo que la variable pid del hijo recive el valor de 0 y la variable pid del padre recive el ProcessID del hijo, tambien puedes recibir un mensaje valor -1 si no se pudo crear el hijo. Es por eso que hago lo siguiente:

Código c:
Ver original
  1. pid = fork();
  2.    if(pid == -1)   //SI NO SE PUDO CREAR HIJO; SALIMOS DEL PROGRAMA
  3.       return 1;
  4.    if(pid == 0){   //SI ERES EL HIJO
  5.       /*Aqui el codigo del hijo*/
  6.    }
  7.    else{   //SI NO, ENTONCES ERES EL PADRE
  8.        /*Aqui el codigo del padre*/
  9.    }
Espero haberte ayudado, cualquier dude me la haces saber

Saludos++