Sedmé vydání Unixového terminálového rozhraní - Seventh Edition Unix terminal interface - Wikipedia
The Sedmé vydání Unixového terminálového rozhraní je zobecněná abstrakce zahrnující jak aplikační programovací rozhraní pro programy a soubor očekávání chování pro uživatele, a terminál jak je historicky k dispozici v Sedmé vydání Unixu. To bylo do značné míry nahrazeno Rozhraní terminálu POSIX.
Koncepty a přehled
Rozhraní terminálu poskytované Unixem a Sevent Edition UNIX / 32V, a také předložil BSD verze 4 jako starý ovladač terminálu, byl jednoduchý, do značné míry zaměřený na dálnopisovače jako terminály. Vstup byl zadáván po řádcích, přičemž ovladač terminálu v operačním systému (a nikoli samotné terminály) poskytuje jednoduché možnosti úprav řádků. Jádro, ve kterém probíhaly úpravy, udržovalo vyrovnávací paměť. Aplikace, které čtou vstup terminálu, by obsah vyrovnávací paměti přijímaly pouze v případě, že vrátit se byla na terminálu stisknuta klávesa k úpravám na konci řádku. The @ klíč odeslaný z terminálu do systému by vymazal („zabil“) celý aktuální obsah editační vyrovnávací paměti a normálně by se zobrazil jako „@'následovaný sekvencí nového řádku pro přesun pozice tisku na nový prázdný řádek. The # klíč odeslaný z terminálu do systému by vymazal poslední znak z konce editační vyrovnávací paměti a byl by normálně zobrazen jako '#Symbol „, který by uživatelé museli rozpoznat jako označující„ rubout “předchozího znaku (dálnopisáři, kteří nejsou fyzicky schopni mazat znaky, jakmile jsou vytištěni na papír).[1][2][3][4][5]
Z programovacího hlediska mělo koncové zařízení vysílat a přijímat přenosové rychlosti, znaky „mazat“ a „zabíjet“ (které prováděly úpravy řádků, jak je vysvětleno), znaky „přerušit“ a „ukončit“ (generování signály pro všechny procesy, pro které byl terminál řídicím terminálem), znaky "start" a "stop" (používané pro softwarové řízení toku ), znak „konce souboru“ (chová se jako návrat vozíku, kromě toho, že je z vyrovnávací paměti vyřazen znakem číst()
systémové volání, a tedy potenciálně způsobující vrácení výsledku nulové délky) a různé příznaky režimu určování zda místní ozvěna byl emulován ovladačem terminálu jádra, ať už bylo povoleno řízení toku modemu, délky různých zpoždění výstupu, mapování znaku návratu vozíku a tři vstupní režimy.[6]
Vstupní režimy
Tři vstupní režimy pro terminály v sedmém vydání Unixu byly:
- režim linky (nazývaný také režim „vaření“)
- V řádkovém režimu řádková disciplína provádí všechny funkce úpravy řádků a rozpoznává řídicí znaky „přerušení“ a „ukončení“ a transformuje je na signály odesílané do procesů. Aplikační programy čtené z terminálu přijímají celé řádky po dokončení úprav řádků stisknutím klávesy návrat.[2][7]
- cbreak režim
- Režim cbreak je jedním ze dvou režimů znaků v čase. (Stephen R. Bourne vtipně to odkázal (Bourne 1983, str. 288) jako „napůl uvařený“ a tedy „vzácný“ režim.) Řádková disciplína neprovádí žádné úpravy řádků a kontrolní sekvence pro funkce úprav řádků jsou považovány za normální zadávání znaků. Aplikační programy čtené z terminálu přijímají znaky okamžitě, jakmile jsou k dispozici ve vstupní frontě ke čtení. Řídicí znaky „přerušení“ a „ukončení“, stejně jako řídicí znaky toku modemu, jsou však stále zpracovávány speciálně a jsou odstraněny ze vstupního proudu.[8][9]
- surový režim
- režim raw je druhým ze dvou režimů znaků v čase. Řádková disciplína neprovádí žádné úpravy řádků a řídicí sekvence jak pro funkce úprav řádků, tak pro různé speciální znaky („přerušení“, „ukončení“ a řízení toku) jsou považovány za normální zadávání znaků. Aplikační programy čtené z terminálu přijímají znaky okamžitě a přijímají celý proud znaků beze změny, stejně jako přišli ze samotného terminálového zařízení.[10][8][9]
V rozhraní terminálu POSIX byly tyto režimy nahrazeny systémem pouhých dvou vstupních režimů: kanonické a nekanonické. Zpracování speciálních znaků generujících signál v terminálovém rozhraní POSIX je nezávislé na vstupním režimu a je samostatně ovladatelné.
Ovládací terminály
V sedmém vydání Unixu nebyl žádný terminál kontrola práce a a skupina procesů bylo považováno za to, čím se dnes nepovažuje.
Každý proces v systému měl buď jeden ovládací terminálnebo vůbec žádný ovládací terminál. Proces zdědí svůj řídicí terminál od svého rodiče. Řídicí terminál byl získán, když byl proces bez řídicího terminálu otevřeno()
s soubor koncového zařízení, který již není řídícím terminálem pro nějaký jiný proces. Všechny procesy, které měly stejný řídicí terminál, byly součástí jednoho skupina procesů.[11]
Aplikační programovací rozhraní
Programové rozhraní pro dotazování a úpravy všech těchto režimů a řídicích znaků bylo ioctl ()
systémové volání. (Toto nahradilo stty ()
a gtty ()
systémová volání šestého vydání Unixu.)[12][13] Ačkoli znaky „vymazat“ a „zabít“ bylo možné upravit z výchozího nastavení # a @Po mnoho let po vývoji sedmého vydání setrvačnost znamenala, že se jednalo o přednastavené výchozí hodnoty v ovladačích koncových zařízení a na mnoha systémech Unix, které pouze změnily nastavení koncového zařízení jako součást procesu přihlášení, v přihlašovacích skriptech systému, které byly spuštěny po uživatel zadal uživatelské jméno a heslo, případné chyby ve výzvách k přihlášení a zadání hesla musely být opraveny pomocí historických editačních klíčových znaků zděděných z terminálů dálnopisu.[4]
Symbolické konstanty, jejichž hodnoty byly pevné a definované, a definice datové struktury programového rozhraní byly definovány v souboru sgtty.h
záhlaví systému.[8]
ioctl ()
operace
The ioctl ()
operace byly následující:
symbol | struktura, na kterou poukazuje třetí argument | popis |
---|---|---|
TIOGETP | sgttyb | dotazovat parametry terminálu do datové struktury |
TIOSETP | sgttyb | nastavit parametry terminálu z datové struktury, nejprve vypustit všechny čekající výstupy a propláchnout vstup ve frontě |
TIOSETN | sgttyb | nastavit parametry terminálu z datové struktury, bez čekání nebo vyčerpání |
TIOCEXCL | žádný | zapněte režim „výhradního použití“ |
TIOCNXCL | žádný | vypnout režim „výhradního použití“ |
TIOCHPCL | žádný | zapněte režim „zavěšení při posledním zavření“ |
TIOCFLUSH | žádný | vyprázdnit všechny výstupní a vstupní fronty |
TIOGETC | tchars | dotazovat parametry terminálu do datové struktury |
TIOSETC | tchars | nastavit parametry terminálu z datové struktury |
The sgttyb
datová struktura
Jedna datová struktura používaná voláními terminálového systému je sgttyb
struktura, jejíž definice programovacího jazyka C je následující:[14]
struktur sgttyb { char sg_ispeed ; // Vstupní rychlost char sg_ospeed ; // Výstupní rychlost char sg_erase ; // Vymazat znak char sg_kill ; // Zabij postavu char sg_flags ; // Ovládací příznaky} ;
Na rozdíl od terminálového rozhraní POSIX zaznamenávalo Unixové terminální rozhraní sedmého vydání vstupní a výstupní přenosovou rychlost přímo v datové struktuře.[15]
Vstupní a výstupní rychlosti v sg_ispeed
a sg_ospeed
pole byla pole DEC DH-11, a byla to čísla 0 až 15, představovaná symbolickými konstantami (ve vzestupném pořadí) B0
, B50
, B75
, B110
,B134
, B150
, B200
, B300
, B600
, B1200
, B1800
, B2400
, B4800
, B9600
, EXTA
, a EXTB
, kde přenosová rychlost byla jako v názvu (přičemž poslední dvě jsou „externí A“ a „externí B“). Nastavení nulové přenosové rychlosti přinutilo ovladač terminálu zavěsit modem (pokud byl terminál modemovým zařízením).[14]
The sg_erase
a sg_kill
pole byla jednoduše hodnotami znaků znaků „vymazat“ a „zabít“, výchozí hodnoty (ASCII) pro '#' a '@'příslušně.[14]
The sg_flags
pole specifikovalo různé příznaky ovládání vstupu a výstupu, jak je uvedeno v následující tabulce.
symbol | osmičková hodnota | popis |
---|---|---|
BSDELAY | 0100000 | zpoždění při psaní BS postavy |
BS0 | 0000000 | |
BS1 | 0100000 | |
VTDELAY | 0040000 | zpoždění při psaní VT a FF postavy |
FF0 | 0000000 | |
FF1 | 0040000 | |
CRDELAY | 0030000 | zpoždění při psaní ČR postavy |
CR0 | 0000000 | |
CR1 | 0010000 | |
CR2 | 0020000 | |
CR3 | 0030000 | |
TBDELAY | 0006000 | zpoždění při psaní TAB postavyXTABS technicky neurčuje zpoždění, ale spíše způsobí převod znaků tabulátoru na sekvence jednoho nebo více mezerových znaků. |
TAB0 | 0000000 | |
TAB1 | 00002000 | |
TAB2 | 0004000 | |
XTABS | 0006000 | |
NLDELAY | 0001400 | zpoždění při psaní LF postavy |
NL0 | 0000000 | |
NL1 | 00000400 | |
NL2 | 0001000 | |
NL3 | 0001400 | |
EVENP | 0000200 | dokonce parita |
ODDP | 0000100 | zvláštní parita |
DRSNÝ | 0000040 | „surový“ režim |
CRMOD | 0000020 | režim mapování návratu vozíku (ČR mapy do LF na vstupu a obojí ČR a LF jsou proměněny ČR+LF na výstupu) |
ECHO | 0000010 | místní ozvěna emulace ovladačem terminálu |
LCASE | 0000004 | mapovat velká písmena na malá písmena na vstupu |
CBREAK | 0000002 | režim „cbreak“ |
TANDEM | 0000001 | povolit řízení toku modemu |
The tchars
datová struktura
Jedna datová struktura používaná voláními terminálového systému je tchars
struktura, jejíž definice programovacího jazyka C je následující:[16]
struktur tchars { char t_intrc ; // Přerušení char t_quitc ; // Ukončit char t_startc ; // Start char t_stopc ; // Stop char t_eofc ; // Konec souboru char t_brkc ; // Přerušení (alternativa k pevně připojenému znaku LF se stejným účinkem)} ;
Hodnoty těchto polí byly hodnotami různých programově konfigurovatelných speciálních znaků. Hodnota -1 v libovolném poli deaktivovala jeho rozpoznávání ovladačem terminálu.[16]
Reference
- ^ Bourne 1983, str. 8.
- ^ A b Bourne 1983, str. 130–131.
- ^ A b Bourne 1983, str. 287.
- ^ A b Christian 1988, str. 26.
- ^ Leffler et al. 1989, str. 262.
- ^ Bourne 1983, str. 132–133.
- ^ Leffler et al. 1989, str. 259–260.
- ^ A b C Bourne 1983, str. 288.
- ^ A b Leffler et al. 1989, str. 260.
- ^ Bourne 1983, str. 132.
- ^ Bourne 1983, str. 130.
- ^ Bourne 1983, str. 133.
- ^ Christian 1988, str. 393.
- ^ A b C Bourne 1983, str. 286.
- ^ Zlotnick 1991, str. 166.
- ^ A b Bourne 1983, str. 289.
Bibliografie
- Bourne, Stephen R. (1983). Systém UNIX. Mezinárodní řada počítačových věd. Addison-Wesley. ISBN 978-0-201-13791-0.CS1 maint: ref = harv (odkaz)
- Christian, Kaare (1988). Operační systém UNIX (2. vyd.). John Wiley & Sons. ISBN 978-0-471-84781-6.CS1 maint: ref = harv (odkaz)
- Leffler, Samuel J .; McKusick, Marshall Kirk; Karels, Michael J .; Quarterman, John S. (1989). "Zpracování terminálu". Návrh a implementace operačního systému 4.3BSD UNIX. Addison-Wesley série v počítačové vědě. Addison-Wesley. ISBN 978-0-201-06196-3.CS1 maint: ref = harv (odkaz)
- Zlotnick, Fred (1991). "Ovládání koncových zařízení". Standard POSIX.1: programátorská příručka. Benjamin / Cummings Pub. Co. ISBN 978-0-8053-9605-8.CS1 maint: ref = harv (odkaz)