Frage

ich für eine Prüfung studierte und ich bin verwirrt, wie kanonische vs. nicht-kanonische Eingabe / Ausgabe-Werke in Unix (z, Flüchen). Ich verstehe, dass es ein Puffer zu dem „-Linie Disziplinen“ für kanonischen Eingang angelegt. Bedeutet dies, dass der Puffer für nicht-kanonischen Eingang umgangen wird, oder ist es einfach bedeuten, dass keine Linie Disziplinen angewandt werden? Wie funktioniert dieses Verfahren für Ein- und Ausgabeoperationen unterscheiden?

In den Flüchen Programme, die ich mit diesem zeigen kanonischen Eingang gearbeitet haben, die Eingabe durch einen Benutzer eingegeben wird automatisch eingetragen entweder nach einer bestimmten Anzahl von Zeichen eingegeben worden sind oder eine gewisse Zeit vergangen ist. Ist entweder diese Dinge als „Linie Disziplinen“ oder ist das etwas ganz anderes?

War es hilfreich?

Lösung

Für kanonischen Eingang - man denke Shell; tatsächlich, denken gute altmodische Bourne-Shell, da Bash und Verwandten einen Befehlszeileneditor haben. Sie geben einen Eingabezeile; wenn Sie einen Fehler machen, verwenden Sie die Lösch Zeichen (Standard ist Backspace , in der Regel, manchmal Löschen ), um das vorherige Zeichen zu löschen. Wenn Sie Chaos komplett, können Sie die ganze Linie mit der Linie Kill-Zeichen (nicht vollständig standardisiert, häufig Strg-X ) abbrechen. Auf einigen Systemen erhalten Sie ein Wort Lösch mit Strg-W . All dies ist kanonischer Eingang. Die gesamte Linie wird gesammelt und bis zum Ende der Zeile Zeichen bearbeitet up - Zurück - gedrückt wird. Daraufhin wird die ganze Zeile zu warten Programme zur Verfügung gestellt. In Abhängigkeit von den read() Systemaufrufen, die offen sind, wird die ganze Zeile zur Verfügung zu lesenden (durch einen oder mehr Anrufe read()).

Für nicht-kanonischen Eingang - denken vi oder vim oder was auch immer - Sie ein Zeichen drücken, und es ist sofort auf das Programm zur Verfügung. Sie sind nicht, bis Sie treffen Rückkehr hielt. Das System führt keine Bearbeitung der Charaktere; sie werden sofort auf das Programm zur Verfügung gestellt, wie sie eingegeben werden. Es ist bis zu dem Programm, um die Dinge in geeigneter Weise zu interpretieren. Nun tut vim eine Reihe von Dingen tun, die ein bisschen wie kanonische Eingabe aussehen. Zum Beispiel bewegt sich Backspace rückwärts, und im Eingabemodus löscht, was da war. Aber das ist, weil vim wählt, um es so verhalten.

Canonical und nicht-kanonische Ausgabe ist eine viel weniger ernste Angelegenheit. Es gibt ein paar Stücke von Differenz, bezogen auf Dinge wie, ob Wagenrücklauf- vor Zeilenvorschub-Echo und ob Verzögerungen zu tun (nicht notwendig, mit Elektronik, wichtig in der Zeit, als das Ausgabegerät gewesen sein könnte ein 110- Baud Fernschreiber). Es kann auch Dinge wie Handgriff Groß- und Kleinschreibung Ausgabegeräte - Fernschreiber, wieder. Kleinbuchstaben ausgegeben in Kappen und Großbuchstaben als Backslash und Kappen.

Es früher so, dass, wenn Sie alle Großbuchstaben an die Anmeldeaufforderung eingegeben hat, dann wird das Login-Programm automatisch in den Modus umwandeln würde, wo alle Kappen Ausgabe vor mit einem Backslash jeder tatsächlichen Hauptstadt waren. Ich vermute, dass dies nicht mehr auf dem elektronischen Terminals erfolgen.


In einem Kommentar, TitaniumDecoy fragte:

  

So mit nicht-kanonischen Eingang, ist der Eingangspuffer vollständig umgangen? Auch wo Linie Disziplinen kommen in?

Mit nicht-kanonischen Eingang wird der Eingangspuffer noch verwendet; wenn kein Programm mit einem read() Anruf wartet auf Eingabe vom Terminal, werden die Zeichen in dem Eingangspuffer gehalten. Was geschieht nicht irgendeine Bearbeitung des Eingangspuffers.

Line Disziplinen sind Dinge wie die Reihe von Manipulationen, die die Eingangsbearbeitung der Fall ist. So ist ein Aspekt der Leitungsdisziplin dass die Löschungs Zeichen ein vorheriges Zeichen in kanonischem Eingabemodus löschen. Wenn Sie icase (Eingabefall-mapping) gesetzt ist, dann werden Großbuchstaben in Kleinbuchstaben abgebildet, es sei denn durch ein Backslash; das ist eine Linie Disziplin, glaube ich, oder ein Aspekt einer Linie Disziplin.


Ich habe vergessen, dass die EOF Verarbeitung zu erwähnen ( Strg-D ) im kanonischen Modus gehandhabt; es bedeutet tatsächlich ‚die akkumulierte Eingang read() Verfügung stellen‘; wenn es keine akkumulierte Eingang (wenn Sie eingeben Strg-D am Anfang einer Zeile), dann die read() Null Bytes zurückgeben, die dann als EOF von Programmen interpretiert wird. Natürlich können Sie fröhlich mehr Zeichen auf der Tastatur danach eingeben und Programme, die ganz glücklich sein EOF (in nicht-kanonischen Modus oder laufen) ignorieren.

Natürlich im kanonischen Modus werden die Zeichen über die Tastatur eingegeben werden in der Regel auf dem Bildschirm angezeigt; Sie können festlegen, ob that Echo auftritt. Dies ist jedoch ein wenig tangential zu kanonischem Eingang; die normale Bearbeitung auftritt, selbst wenn Echo ausgeschaltet ist.

Auch die Unterbrechung und beenden Signale Artefakte der kanonischen Modus Verarbeitung sind. So sind auch die Job-Steuersignale wie Strg-Z , um den aktuellen Prozess zu unterbrechen und an dem Shell zurück. Ebenso Flußsteuerung ( Control-S , Steuer-Q zu stoppen und starten Ausgang) von Canonical-Modus vorgesehen ist.

Kapitel 4 von Rochkind Erweiterte Unix Programmierung, 2. Ausgabe umfasst Terminal I / O und gibt viele diese Informationen - und eine ganze Menge mehr. Andere UNIX-Programmierung Bücher (zumindest die guten) wird es auch abdecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top