Programm auf Tastendruck beenden und vorher noch closef ausführen

Dieses Thema im Forum "C/C++" wurde erstellt von ölgötz, 28.11.2007.

  1. #1 ölgötz, 28.11.2007
    Zuletzt bearbeitet: 28.11.2007
    ölgötz

    ölgötz Grünschnabel

    Dabei seit:
    31.01.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    ich bin neu in der Linux-und C-Programmierung und hab' mir folgendes Progrämmchen gebastelt:

    Ein Programm in C, das nach dem Programmstart eine Datei anlegt und dann in einer Endlosschleife den LPT-Port und den seriellen Port abfragt. Wenn auf einem der beiden Ports was passiert, dann wird dieses Ereignis zusammen mit der exakten Zeit in die Datei geschrieben ... daneben passieren noch ein paar andere Dinge, aber die spielen für meine Frage hier gerade keine Rolle ...

    Mein Problem ist jetzt, dass ich das Programm derzeit mit Strg+C abbreche. Deswegen komme ich nicht zum closef(), das den Datenfile anständig schreibt und schließt und folgerichtig ist der angelegte File immer leer.

    Jetzt könnte ich eine Tastaturabfrage in die Schleife einbauen, um das Programm sauber zu beenden. Aber getchar() geht nicht, weil das Programm an der Stelle stehen bleiben und auf eine Eingabe warten würde. Meine Frage daher: Gibt es irgend eine andere Möglichkeit, eine Tastatureingabe nur dann abzufangen, wenn tatsächlich eine bestimmte Taste gedrückt wird und wenn keine gedrückt wird, läuft das Programm einfach weiter ?

    ... Ich vermute, dass ich, wenn ich eine GUI verwenden würde, ich wahrscheinlich Funktionen zur Verfügung gestellt bekommen würde, die die Tastaturereognisse abfangen würden, mir genügt aber vorerst das Arbeiten und die Bildschirmausgabe mit der bash - deswegen suche ich eine Lösung, die ohne QT oder ähnlichem auskommt.

    Kann mir da jemand einen Tipp geben?

    PS: Ich hab' gerade gemerkt, dass sich das Problem mit der leeren Datei relativ einfach lösen lästt, wenn man von Zeit zu Zeit fflush(); aufruft ... An der Frage nach dem Abfangen der Tastaturereignisse wäre ich aber weiterhin interessiert ...

    Viele Grüße,
    Ö
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Lesco, 28.11.2007
    Zuletzt bearbeitet: 28.11.2007
    Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Entweder du lagerst die blockierenden Sachen in einen extra Thread aus und wartest im Hauptthread auf den Tastendruck oder du fängst SIGINT(ctrl-c) mit signal() ab und führst dann im Handler closef() usw aus.(wahrscheinlich einfacher, da du dich nicht um die Kommunikation usw. zwischen den Threads kümmern musst)
     
  4. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    die stdlib.h enthält eine funktion kbhit().
     
  5. #4 Lesco, 29.11.2007
    Zuletzt bearbeitet: 29.11.2007
    Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Soweit ich weiß, gibt's kbhit() nicht standardmäßig unter GNU/Linux. Es gibt zwar eine Entsprechung bei der ncurses-Bibliothek, deren Anwendung für dieses Problem aber m.E. übertrieben wäre. kbhit() könntest du dir allerdings auch selbst schreiben: http://my.execpc.com/~geezer/software/kbhit.c(Nicht getestet)
     
  6. #5 ölgötz, 29.11.2007
    ölgötz

    ölgötz Grünschnabel

    Dabei seit:
    31.01.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo, Lesco & JBR,

    toll, dass ihr so schnell geantwortet habt. Ich werde die beiden Möglichkeiten mal ausprobieren und hier berichten.

    Gruss,
    Ö
     
  7. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Programm auf Tastendruck beenden und vorher noch closef ausführen

Die Seite wird geladen...

Programm auf Tastendruck beenden und vorher noch closef ausführen - Ähnliche Themen

  1. Welche Distri für Programming from the Ground Up

    Welche Distri für Programming from the Ground Up: Hallo! Ich möchter gerne das Buch Programming from the Ground Up durcharbeiten. savannah_nongnu_org/projects/pgubook/ Da geht es um Programmieren...
  2. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...
  3. Jetbrains gibt JVM-Programmiersprache Kotlin 1.0 frei

    Jetbrains gibt JVM-Programmiersprache Kotlin 1.0 frei: Jetbrains, Entwickler der freien Entwicklungsumgebung für Java, Grails und einige andere Programmiersprachen IntelliJ IDEA, hat die selbst...
  4. Programm der Chemnitzer Linux-Tage 2016 steht

    Programm der Chemnitzer Linux-Tage 2016 steht: Am Wochenende des 19. und 20. März steht Chemnitz, oder genauer gesagt die TU Chemnitz, wieder ganz im Zeichen des Tux. Nun haben die...
  5. »Jugend Programmiert Creator Kit« vorgestellt

    »Jugend Programmiert Creator Kit« vorgestellt: Nachdem die Organisatoren der Kickstarter-Kampagne, die Jugendlichen das Erlernen einer Programmiersprache und das Programmieren im Allgemeinen...