C/Visual C - como crear programa residente en C

 
Vista:

como crear programa residente en C

Publicado por karel (1 intervención) el 05/05/2003 22:19:37
necesito crear un programa en c que me muestre la hora y que este se quede residente en mi maquina, que a la vez yo lo pueda cerrar cuando yo quiera por una combinacion de teclas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa residente que muestra la hora y se cierra con combinación de teclas

Publicado por Alejandro (1153 intervenciones) el 22/05/2025 18:45:42
Karel, para crear un programa en C que muestre la hora y que se quede residente en la memoria, puedes utilizar la técnica de "Terminate and Stay Resident" (TSR). A continuación, te muestro un ejemplo básico de cómo implementar esto en un entorno de MS-DOS. Ten en cuenta que este tipo de programación es más común en sistemas operativos antiguos como DOS y puede no ser compatible con sistemas modernos.

Ejemplo de código



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
 
void interrupt (*oldTimer)(void);
void interrupt newTimer(void);
 
int running = 1;
 
void interrupt newTimer(void) {
    if (kbhit()) { // Verifica si se ha presionado una tecla
        char ch = getch();
        if (ch == 27) { // Si se presiona la tecla ESC (código ASCII 27)
            running = 0; // Cambia el estado para salir
        }
    }
}
 
void showTime() {
    while (running) {
        time_t now = time(NULL);
        struct tm *local = localtime(&now);
        printf("\rHora actual: %02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);
        delay(1000); // Espera 1 segundo
    }
}
 
int main() {
    oldTimer = getvect(0x1C); // Guarda el vector de interrupción anterior
    setvect(0x1C, newTimer); // Establece el nuevo vector de interrupción
 
    printf("Presiona ESC para cerrar el programa.\n");
    showTime();
 
    setvect(0x1C, oldTimer); // Restaura el vector de interrupción anterior
    printf("\nPrograma cerrado.\n");
    return 0;
}

Explicación del código



1. Interrupciones:
- Se utiliza una interrupción para verificar si se ha presionado una tecla. En este caso, se utiliza la interrupción del temporizador (0x1C) para ejecutar `newTimer` cada vez que se produce un "tick" del temporizador.

2. Mostrar la hora:
- La función `showTime` muestra la hora actual en la consola y se actualiza cada segundo. Utiliza `time()` y `localtime()` para obtener la hora actual.

3. Cerrar el programa:
- Si se presiona la tecla ESC, se cambia la variable `running` a 0, lo que provoca que el bucle en `showTime` termine y el programa se cierre.

4. Residente en memoria:
- El programa se queda residente en memoria al utilizar la técnica TSR, permitiendo que se ejecute en segundo plano.

Compilación y ejecución



Este código debe ser compilado en un entorno que soporte programación en C para DOS, como Turbo C o Borland C. Ten en cuenta que este tipo de programación puede no ser compatible con sistemas operativos modernos, y se recomienda utilizar entornos de virtualización o emulación si es necesario.

Nota



La programación TSR es un tema avanzado y puede requerir un buen entendimiento de cómo funcionan las interrupciones y la gestión de memoria en sistemas operativos antiguos. Si estás trabajando en un entorno moderno, considera alternativas más actuales para lograr un comportamiento similar, como aplicaciones de fondo en Windows utilizando APIs modernas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar