Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Terminal-Emulator schreiben

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103

    Terminal-Emulator schreiben

    Hallo.

    Nein... Mein Ziel ist es nicht, einen Terminal-Emulator zu schreiben... Mein Ziel ist kein spezielles... Ich frag mich nur: Wie funktionieren unter Linux die Terminal-Emulatoren. Also wie "eröffnet" man eine Pipe oder was auch immer, die Programme als "stdout" anerkennen, und lässt diese dann dort laufen...

    Also das Problem etwas konkreter: Wenn ich nur die Ausgabe will, nehm ich halt den lieblichen Querstrich |, also meinetwegen programm1 | programm2... Aber was mach ich, wenn ich will, dass nicht nur das stdout von programm 1 zu programm 2 ins stdin weitergeleitet wird, sondern dass programm2 auch das stdin von programm1 kontrollieren kann?
    Ja... Also im Prinzip ein Terminal-Emulator eben... Ich würd das gerne wissen... Zu vt100 & co. hab ich schon einiges im Internet gefunden, was aber mehr damit zu tun hat, wie man selber vt-Emulatoren ansteuert... Wie man einen terminal-emulator an sich schreibt, steht nicht da... Bzw. wie man oben Genanntes macht. Und wie man ner bash sagen kann, sie soll bitte ihre Ausgabe an mein Prog schicken und so weiter...

    Ich nehme an, dass das nicht ganz einfach sein wird... weshalb ich auch jetzt keine direkte Komplettlösung erwarte... Aber mein Problem ist, dass ich nicht so recht weiß, wonach ich suchen muss... Ich wäre also bereits über ein paar Suchbegriffe, mit denen ich g00gle füttern könnte, um nicht nur auf genannte Seiten zu kommen, dankbar.

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das geht über Pseudo Terminal Devices

    man:/pty

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103
    Ok. Danke... Ich habs jetzt ewig probiert... Man findet auch viel dazu... Aber ich kapiers nicht... Da gibts noch lauter seltsame Funktionen wie openpt und grantpt und dergleichen... Hab den folgenden Beispielcode gefunden, aber der geht bei mir nicht:

    Code:
    #include <fcntl.h>
    #include <stdio.h>
    
    int main (void) {
    int masterfd;
    int* slavefd;
    char *slavedevice;
    
    
    masterfd = posix_openpt(O_RDWR|O_NOCTTY);
    
    
     *slavedevice = ptsname (masterfd);
    
    if (masterfd == -1
        || grantpt (masterfd) == -1
        || unlockpt (masterfd) == -1
        || (slavedevice == NULL))
        return -1;
    
    
    printf("slave device is: %s\n", slavedevice);
    
    
    *slavefd = fopen(slavedevice, O_RDWR|O_NOCTTY);
    if (slavefd < 0)
        return -1;
    }
    Da Kriege ich Speicherzugriffsfehler... Aber keine Ahnung. Hab den nur irgendwo gefunden... Hab auch versucht ihn zu verändern, aber hat nichts gebracht... Und naja... Selbst wenn... Ich hätte keine Ahnung, wie man jetzt letztendlich dann darauf zugreift...
    Jetzt weiß ich irgendwie nicht mehr weiter. Im Internet sieht man zwar viel dazu, aber mal ne Zusammenfassung oder wenigstens ein funktionierender kleiner Beispielcode... Fehlanzeige...

    Wäre sehr freundlich, wenn mir jemand helfen könnte.

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Code:
    #include <fcntl.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main (void) {
    	int masterfd;
    	int* slavefd;
    	char *slavedevice;
    
    	masterfd = posix_openpt(O_RDWR|O_NOCTTY);
    
    	slavedevice = (char *)ptsname (masterfd);
    
    	if (masterfd == -1
    	    || grantpt (masterfd) == -1
    	    || unlockpt (masterfd) == -1
    	    || (slavedevice == NULL))
    	    return -1;
    
    
    	printf("slave device is: %s\n", slavedevice);
    
    
    	*slavefd = open(slavedevice, O_RDWR|O_NOCTTY);
    	if (slavefd < 0)
    		return -1;
    	return 0;
    }
    so funktionierts bei mir...
    Cheers jeebee

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103
    Danke soweit.

    Ich erhalte:
    Code:
    slave device is: /dev/pts/1
    Speicherzugriffsfehler
    Immerhin ein Fortschritt. Aber es ist ja leider auch nicht so, dass ich wirklich verstehen würde, was das hiesige Codefragment macht... Also es öffnet /dev/pts/x (x=zahl), und das soll dann das stdout des programms sein, das ausgeführt werden soll... Sehe ich das richtig?
    Aber auch da weiß ich nicht wirklich weiter. Also ich will ja den Zustand erreichen, dass ich ein Programm (z.B. eine bash) ausführen kann, und ich deren Eingaben steuern kann, und deren Ausgabe abfangen kann... Und ich hab irgendwie das Gefühl, dass ich davon noch sehr weit entfernt bin... Zumal ich bereits das jetzige Codefragment nur begrenzt verstehe...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •