buenas.
yo llevo mirando lo de programar en C para psp una semana, así que lo mismo estoy metiendo la gamba hasta el fondo. tu duda me parece muy interesante y es lo mismo que me he estado preguntando yo. tener un while(1) ahí es no querer que se ejecute nada más que eso...
la idea que he tenido (no he tenido tiempo de ponerme a implementarlo, así que lo comento por si te vale de algo) es hacer lo mismo que se hace en linux para el manejo de interrupciones (y tú usando gentoo probablemente sepas de qué va jeje).
esto es: lanzas un hilo y lo dejas dormido. cada vez que haya una pulsación de una tecla que ese hilo despierte, haga lo que tenga que hacer y vuelva a dormir.
en el C de toda la vida esto se hace con
signal(SIGINT, (void *)handler_sigint);
en el main al principio y luego te creas la función:
void *handler_sigint(int sig)
{
printf("\nCerrando el socket !!!\n\n");
close(sd);
};
eso lo que hace es controlar el ctrl+c y salir apropiadamente (no a lo bruto)
he estado viendo que hay funciones para manejar hilos prácticamente de la misma forma que en el linux de siempre. de hecho las 3 funciones que se ponen siempre al comenzar un programa eso es lo que hacen. en vez de ponerle que controle el SIGINT le pones que detecte los botones (vale, no sé cómo hacer esto, habría que mirarlo) y listo
espero que te valga de algo la idea. si es pura basura dilo y listo xD
suerte con lo que estés haciendo