Programm funktioniert im GnuDeBugger , normal nicht



  • Hallo, wie schon gesagt, es funktioniert im GDB, aber nicht als Binary von der BASH aus.

    Ich mag lediglich Tastendruecke (und das hab ich schon mal geschafft, den Code geloescht), kein Wort.

    Wenn das zufaellig einer richten kann, der melde sich bei mir.

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <termios.h>
    
    int main ( int argc , char *argv[] ) {
    
    	char c;
    	struct termios iomask,maskbuf;
    
    	tcgetattr( 0 , &iomask );
       memcpy( &iomask , &maskbuf , sizeof ( struct termios ));
       iomask.c_lflag &= ( ~ICANON );
       iomask.c_cc[VTIME] = 0;
       iomask.c_cc[VMIN] = 1;
       tcsetattr( 0 , TCSANOW , &iomask );
    	for (;;) {
    		c = getchar ();
    			if ( c==78 || c==110 ) {
    			tcsetattr ( 0 , TCSANOW , &maskbuf );
    			exit ( 1 );
    			}
    		if ( c==89 || c==121 || c==0 ) {
    			tcsetattr ( 0 , TCSANOW , &maskbuf );
    			exit ( 0 );
    			}
    		}
    	}
    


  • Vom Umstand abgesehen, dass ich zum Compilieren noch alloc.h einbinden musste und mir erzaehlte wurde, dass veraltete Header eingebunden waren, ich kann den Crash nicht nachvollziehen.



  • Also maskbuf ist zumindest uninitialisiert. Crashen sollte er deswegen zwar nicht unbedingt gleich, aber er tut sicher auch nicht das, was du willst.



  • ...naja, wie schon gesagt...arbeite ich das im GDB Zeile fuer Zeile ab funktioniert es (Program terminated normaly - exit code: 1/0).

    Aber aus der Bash heraus will es nit.

    Keiner nen anderen Code um Tastendruecke zu kriegen?

    P.S. Danke fuers ausprobieren an @MMBCS.

    @Ringding: Warum ist maskbuf uninitialisiert? - ja klar, hab gemerkt das die Argumente von memcpy vertauscht sind. Aendert aber nichts.

    Nochmal kurz:

    Das Programm moechte ich in Shell-Skripts verwenden, um eine Yes/No Abfrage auf die Tasten N/n/Y/y/Return(Leere Eingabe) zu implementieren. Gibt dann nur den Exitcode 1/0 zurueck.



  • @Ringding: Warum ist maskbuf uninitialisiert? - ja klar, hab gemerkt das die Argumente von memcpy vertauscht sind. Aendert aber nichts.

    Natürlich ändert das was, nämlich genau das.



  • Hm, du hast vollkommen recht.

    Trotzdem, Aenderung im Verhalten dieses Binary bewirkte es schlussendlich nicht (eine Ausnahme schaetze ich) - haette mich gefreut waere ich so zu einer Loesung gekommen.

    Aber nochmal danke.



  • P.S. Hast ein gutes Auge.


Anmelden zum Antworten