Eine Frage zum speicher und eine zur Eingabe



  • Hallo,
    ich habe mal zwei fragen bezüglich C.

    1. ich würde versuche mich etwas in c und hätter gerne wenn ich eine eingabe in meinem programm mache, das ich wie bei linux,windows... mit den pfeiltasten den letzen befehl wiederhole,bzw noch oben unten blättern kann. wie ich die eingaben abspeicher weiss ich, aber wie macht man es das sie nur im prompt stehen und noch bearbeitet werden können. Wenn ich was an die stdout gebe wird es ja gleich verarbeitet oder???

    2. Hab ich mal den blöde frage bezüglich des heap/Stack speichers. Ich wollte aus langeweile mal mit einem Zeiger aus programm a, den speicher aus programm b auslesen geht natürlich nicht. Aber woran liegt es? geht das generell nicht oder liegt das an der Smash stack protection von C?



  • 1. stdin holt sich die Daten direkt aus dem Tastaturpuffer bzw. dem Betriebssystem. Um solche Sachen wie Befehls-Wiederholung zu entwickeln, mußt du die Bereiche von ANSI C verlassen und betreibssystemspezifische Methoden nutzen, um Tastatur und Bildschirm direkt anzusprechen.

    2. das Betriebssystem gibt jedem Programm einen eigenen Bereich im RAM und einen virtuellen Adressraum, in dem es für sich alleine ist. Um den Speicher anderer Programme zu erreichen, brauchst du deshalb die Hilfe des Betriebssystems (shared Memory oder ähnliches)
    (unter Windows kenne ich noch die ReadProcessMemory(), was Unix hat weiß ich nicht)



  • Befehlswiederholung usw geht am leichtesten mit der GNU readline Bibliothek.



    1. das ist Funktionalität der Shell, hat mit C nichts zu tun, es sei denn, du willst eine neue Shell programmieren
    2. du musst dir Gedanken machen, wie du Programm b Adressbereiche von Programm a mitteilst; es gibt auch andere Wege (und passende Bibliotheken dazu) um Programme/Prozesse miteinander kommunizieren zu lassen, z.B. Pipes


    1. das ist Funktionalität der Shell, hat mit C nichts zu tun, es sei denn, du willst eine neue Shell programmieren

    Nicht unbedingt.
    Es gibt viele Programme die ein Shell-ähnliches User interface bereitstellen (gdb und bc, um mal 2 Beispiele aus der *NIX-Welt zu nennen). Diese Programme unterstützen intern ganz andere Sachen als die Shell, man kann sie also nicht als getrennte Programme über die Shell verknüpfen (ein eigenes programm namnes 5+3 das einfach nur 8 ausgibt wäre recht doof)
    Genau deshalb hat das GNU-Projekt diese Funktionalität in die readline-Bibliothek ausgelagert. Ich weiß nicht ob es noch ähnliche Bibliotheken gibt(bestimmt) aber GNU readline habe ich schon selbst benutzt und es ist wirklich einfach zu bedienen, deshalb kann ich es halt empfehlen



  • ja, GNU readline ist eine gute Empfehlung. Ich habe sie auch schon benutzt, nicht schwer zu bedienen.


Log in to reply