Signale in C



  • Hallo zusammen!

    Ok den ersten Thread habe ich gelesen, und hoffe das ich nicht "RTFM! oder warum dir keiner helfen will..." verwiesen werde *g

    Also wir müssen / bzw. dürfen in der UNI C lernen. *juhu*

    Ich bin wirklich blutiger Anfänger. Ich habe bisher geschafft cygwin zu installieren (falls das jemand kennt) und mein erstes tolles programm zu compilieren und die exe zu starten. So weit so gut.

    Wir haben jetzt als Aufgabe bis Freitag bekommen ein Programm zu schreiben mit einer Endlosschleife, in der eine Variable jede Sekunde erhöht wird. ABER, jetzt kommts. "Geben Sie beim Empfangen des Signals SIGURS1, eine Meldung aus und stoppen den Zählvorgang für 3 Sekunden"

    Ja 😞 Leider weiß ich gar nicht wie ich da dran gehen soll. Ich hoffe jemand kann mir erklären wie das mit den Signalen ungefähr funktioniert? Sind Signale sowas wie Interrupts? Oder hat jemand ein Link wo das erklärt wird? Bin leider immer noch nicht fündig geworden.

    So sieht mein Programm bisher aus

    /*
    
    #include<stdio.h>
    #include <unistd.h>
    
    int main(void)
    {
        int increment=0;
    
        for(;;) { 
        increment++;
        sleep(1);
        printf("juhu... \n");
    
        }
    
        return 0;
    }
    

    Irgendwie muss ich da ja jetzt nen Signal eingeben, auf das die for schleife dann reagiert ?! 😕

    mfg
    xLiberty



  • Sollt ihr für die Aufgabe cygwin benutzen?
    Soweit ich weis emuliert das ne linux-umgebung in windows,
    wies da mit den siganlen aussieht weis ich nciht.
    (erstellt cygwin nicht a.out dateien und keine exe?)

    für welches system also(windows-> winapi forum / linux -> linuxforum)

    zu linux hät ich auch gleich nen link http://www.pronix.de/pronix-22.html
    wies bei windows ausshieht weis ich nciht.



  • Hi !

    Ja wir sollen / können das benutzen.

    Wir erstellen dann mit einer Make file - eine exe file unseres programms.

    also ich hab mein programm mal ein bisschen erweitert. aber es gibt immer nen fehler aus, bei "signal (SIGUSR1,signalfound);"

    /*   compile with: gcc -Wall -ansi filename.c */
    
    #include<stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    void signalfound(void) {
    	printf("Signal SIGUSR1 erhalten\n");
    	sleep(3);
    }
    
    int main(void)
    {
        int increment=0;
        signal (SIGUSR1,signalfound);
    
        for(;;) { 
        increment++;
        sleep(1);
        printf("juhuu... /n");
    
        }
    
        return 0;
    }
    


  • Der Prototyp für signal handler ist

    void sig_handler( int signo )
    

    Dein Signal Handler sollte also ungefär so aussehen:

    /*   compile with: gcc -Wall -ansi filename.c */
    
    #include<stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    void sig_usr1( int signo )
    {
       printf("Caught USR1 signal\n");
       alarm(3);
    }
    
    int main(void)
    {
        int increment=0;
        signal (SIGUSR1,sig_usr1);
    
        for(;;) {
    		sleep(1);
    		increment++;
    	}
    
        return 0;
    }
    

Anmelden zum Antworten