/* nach einem Beispiel von Dr. A. Borchert */ # include # include # include volatile sig_atomic_t signal_caught = 0; void my_signal_handler(int sig) { // setzt globale Variable auf eingegangene Signalnummer signal_caught = sig; } int main() { int i, counter = 0; // Signal-Handler einrichten fuer SIGINT if (signal(SIGINT, my_signal_handler) == SIG_ERR) { perror("Can't setup signalhandler for SIGINT"); exit(1); } printf("Try to send SIGINT!\n"); // In dieser Schleife werden weder externe Funktionen // aufgerufen noch wird die Schleifenbedingung beeinflusst // --> Compiler: Schleifenbedingung muss wohl nur einmal // geprueft werden // verhindert durch Speicherklasse ``volatile'': // solche Variable koennen sich veraendern, auch wenn nicht // aus dem Programmtext ersichtlich: while (!signal_caught) { for (i = 0; i < counter; ++i); counter++; } printf("Got signal %d after %d steps!\n", signal_caught, counter); exit(0); }