Domanda

Sto studiando per un esame e sono confuso su come canonica vs ingresso non canonico / opere di uscita in Unix (ad esempio, maledice). Capisco che v'è un buffer a cui vengono applicati "discipline line" per l'ingresso canonica. Questo significa che il buffer è bypassato per l'input non canonico, o ha semplicemente dire che non le discipline di linea sono applicate? Come funziona questo processo si differenziano per le operazioni di input e output?

Nei programmi maledizioni ho lavorato con tale ingresso dimostrare canonica, l'input digitato da un utente viene inserito automaticamente o dopo un certo numero di caratteri è stato digitato o una certa quantità di tempo è passato. Sono una di queste cose considerate "discipline di linea" o si tratta di qualcosa di completamente diverso?

È stato utile?

Soluzione

Per l'ingresso canonico - pensare guscio; in realtà, pensa bene di shell vecchio stile Bourne, dal momento che Bash e parenti hanno l'editing della riga di comando. Si digita una riga di input; se si commette un errore, è possibile utilizzare il carattere di cancellazione (di default è Backspace , di solito, a volte Elimina ) per cancellare il carattere precedente. Se sbagli completamente, è possibile annullare l'intera linea con il carattere linea di uccidere (non completamente standardizzata, spesso Control-X ). Su alcuni sistemi, si ottiene una parola cancellazione con Control-W . Tutto questo è in ingresso canonica. L'intera linea è raccolto e curato fino alla fine della linea carattere - Return - viene premuto. Allora, tutta la linea è messo a disposizione programmi di attesa. A seconda delle chiamate di sistema read() che sono eccezionali, l'intera linea sarà disponibile per essere letto (da una o più chiamate a vi).

Per l'ingresso non canonico - pensa vim o icase o qualsiasi altra cosa - si preme un carattere, ed è immediatamente disponibile per il programma. Non sei retto fino a colpire di ritorno. Il sistema non fa editing dei personaggi; essi sono messi a disposizione del programma non appena vengono digitate. Spetta al programma di interpretare le cose in modo appropriato. Ora, <=> fa fare una serie di cose che sembrano un po 'come ingresso canonica. Ad esempio, backspace sposta all'indietro, in ingresso modalità elimina cosa c'era. Ma questo perché <=> sceglie di rendere comportarsi in quel modo.

uscita canonica e non canonica è un business molto meno grave. Ci sono alcuni frammenti di differenza correlato a cose come se eco ritorno a prima linea di alimentazione, e che fare ritardi (non necessario con elettronica; importanti nei giorni in cui il dispositivo di uscita potrebbe essere un 110- baud telescrivente). Si può anche fare cose come dispositivi di uscita case-insensitive manico - telescriventi, ancora una volta. lettere minuscole vengono emessi in capsule, e minuscole lettere come backslash e tappi.

E 'usato per essere che se digitato tutte le lettere maiuscole al prompt di login, quindi il programma login sarebbe convertire automaticamente alla modalità in cui tutti i tappi erano uscita con un backslash davanti a ogni capitale reale. Ho il sospetto che questo non è più è fatto su terminali elettronici.


In un commento, TitaniumDecoy chiesto:

  

Quindi, con ingresso non canonica, è il buffer di input bypassato completamente? Inoltre, da dove le discipline di linea sono disponibili in?

Con ingresso non-canonica, il buffer di ingresso è ancora utilizzato; se non esiste un programma con una chiamata <=> attesa di input dal terminale, i caratteri vengono tenuti nel buffer di input. Quello che non succede è alcuna modifica del buffer di ingresso.

Le discipline di linea sono cose come l'insieme di manipolazioni che l'editing di ingresso fa. Così, un aspetto della disciplina di linea è che il carattere di cancellazione cancella un carattere preliminare in modalità di immissione canonica. Se si dispone di <=> (ingresso caso-mapping) set, quindi caratteri maiuscoli vengono mappati a minuscole se preceduto da una barra rovesciata; che è una disciplina di linea, credo, o un aspetto di una disciplina di linea.


Ho dimenticato di dire che il trattamento EOF ( Control-D ) viene gestito in modalità canonica; in realtà significa 'rendere l'ingresso accumulato disposizione <=>'; se non c'è input accumulato (se si digita Control-D all'inizio di una riga), quindi il <=> restituirà zero byte, che viene poi interpretato come EOF dai programmi. Naturalmente, è possibile digitare più allegramente i caratteri sulla tastiera dopo che, e programmi che ignorano EOF (o eseguire in modalità non-canonica) sarà molto felice.

Naturalmente, in modalità canonica, i caratteri digitati sulla tastiera sono normalmente visualizzata sullo schermo; è possibile controllare se si verifica che eco. Tuttavia, questo è un po tangente all'ingresso canonica; l'editing normale si verifica anche quando eco è spento.

Analogamente, la interrompere und uscire segnali sono elementi di elaborazione in modalità canonica. Lo stesso vale per i segnali di controllo di posti di lavoro come ad esempio Control-Z per sospendere il processo in corso e tornare alla shell. Allo stesso modo, il controllo di flusso ( Control-S , Control-Q per arrestare e avviare uscita) è fornito dalla modalità canonica.

Il capitolo 4 della programmazione avanzata Unix di Rochkind, secondo Edn copre I terminali / O e dà molte di queste informazioni - e molto di più. Altri libri di programmazione UNIX (almeno, quelli buoni) copriranno anche esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top