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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tratar resultados de diferentes procesos en proceso parent
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tratar resultados de diferentes procesos en proceso parent  (Leído 1,612 veces)
daphataz

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Tratar resultados de diferentes procesos en proceso parent
« en: 9 Mayo 2016, 17:39 pm »

1111Hola, muchas gracias de antemano a tod@s los que me pueden echar un cable.
Estoy realizando una especie de juego al estilo 7 y media (o black jack), donde hay un programa repartidor.c y otro que se llama jugador.c. En principio funciona pasando el parámetro de numero de jugadores al repartidor, y este mediante fork() va creado procesos hijos los cuales realizan la partida y van mostrando concurrentemente con el proceso padre los resultados intermedios. Hay un momento en el que los jugadores se van plantando y mediante exit() indican al proceso padre que han concluido (con un wait()), hasta aqui lo tengo hecho, pero ahora lo que deberia hacer es poner al final de todo una linea indicando que jugador ha ganado y con cuanta puntuación (pid del hijo y resultado interno del programa jugador). Básicamente creo que cuando leo proceso y puntos obtenidos tendria que meterlo en algun lugar para luego compararlos todos y sacar el ganado.... pero ni idea, llevo bloqueado dias. Alguna idea? Pongo el código que tengo hasta el momento para que lo veais mejor (o eso espero):
Código:
int trataExitCode(int pid,int st)
{
int statcode,signcode;
char charbuffer[128];
if(WIFEXITED(st)) {
statcode=WEXITSTATUS(st);
sprintf(charbuffer, "%sEl proceso %d termina con exitcode %d%s\n",color_blue ,pid,statcode,color_end);
write(1,charbuffer,strlen(charbuffer));
return statcode;
}
else{
signcode=WTERMSIG(st);
sprintf(charbuffer,"Elproceso %d termina por el signal%d\n",pid,signcode);  //aqui ya tengo pid de hijo y resultado, ahora deberia tratarlo de algun modo para que de todas las lineas que muestre al final me diga que
//proceso ha sacado la mejor puntuacion (mas cercana a 15 y en caso de empate el del pid mas bajo).
write(1,charbuffer,strlen(charbuffer));
}
}
int
main (int arc, char *arv[])
{
  int i, n, st, pid;
  char s[100];
  char *args[] = { "jugador2", NULL };

  if (arc != 2)
    error ("Error: wrong arguments.");

  n = atoi (arv[1]);

  sprintf (s,
           "\n**********Start of game (%d players, pid croupier=%d)***********\n",
           n, getpid ());
  if (write (1, s, strlen (s)) < 0)
    error ("write");

  for (i = 0; i < n; i++){
    pid = fork();
    if(pid == 0) {    // son
execv (args[0], args);
    }
   
    if(pid > 0) {    //parent
    sprintf (s, "%s[%d] pid=%d created%s\n", color_blue, getpid (), pid,color_end);
      if (write (1, s, strlen (s)) < 0)
            error ("write");

    }
   }
   while((pid=wait(&st))!= -1) {       //aqui trata el resultado que jugador.c envie por exit()
trataExitCode(pid,st);
}
   while ((pid = wait(&st)) != -1){
sprintf (s, "%s[%d] pid=%d ended%s\n", color_blue, getpid (), pid,
                   color_end);   //aqui va mirando que procesos van acabando
          if (write (1, s, strlen (s)) < 0)
            error ("write");
    }

  sprintf (s, "\n**********End of game: all players have ended***********\n");
  if (write (1, s, strlen (s)) < 0)
    error ("write");
/////****** Aqui deberia sacar una linea del estilo el "El proceso xxx ha ganado cno yy puntos"
  exit (0);

Mil gracias!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ReadProcessMemory da resultados diferentes w7/XP
Programación C/C++
Nork 4 3,133 Último mensaje 5 Julio 2010, 13:32 pm
por Nork
[pregunta]como separo diferentes threats en diferentes ventanas en windows « 1 2 »
Programación C/C++
daryo 10 5,634 Último mensaje 4 Octubre 2013, 23:10 pm
por daryo
cifrado Java - PHP con resultados diferentes.
Programación General
turion 3 4,406 Último mensaje 9 Octubre 2016, 00:22 am
por 6hiii
Convertir valor a base 16, resultados diferentes
PHP
:ohk<any> 1 3,467 Último mensaje 27 Marzo 2022, 21:14 pm
por :ohk<any>
[Video] Cómo tratar con procesos largos usando Symfony
PHP
mchojrin 0 578 Último mensaje 16 Agosto 2024, 10:22 am
por mchojrin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines