Kontroltegn - Control character
I computing og telekommunikation , en kontrol karakter eller ikke-udskrivning karakter ( NPC ) er en kode punkt (et tal ) i et tegnsæt , der ikke repræsenterer en skriftlig symbol. De bruges som in-band-signalering til at forårsage andre virkninger end tilføjelsen af et symbol til teksten. Alle andre tegn er hovedsageligt udskrivnings- , printbare eller grafiske tegn , bortset fra måske " mellemrum " -tegnet (se ASCII -udskrivbare tegn ).
Alle poster i ASCII -tabellen under kode 32 (teknisk set C0 -kontrolkodesættet) er af denne art, herunder CR og LF, der bruges til at adskille tekstlinjer. Koden 127 ( DEL ) er også et kontroltegn. Udvidede ASCII -sæt defineret af ISO 8859 tilføjede koderne 128 til 159 som kontroltegn, dette blev primært gjort, så hvis den høje bit blev fjernet, ville det ikke ændre et udskrivningstegn til en C0 -kontrolkode, men der har været nogle tildelinger her, især NEL . Dette andet sæt kaldes C1 -sættet.
Disse 65 kontrolkoder blev overført til Unicode . Unicode tilføjede flere tegn, der kunne betragtes som kontrolelementer, men det skelner mellem disse "formateringstegn" (f.eks. Ikke -bredde-nul-bredden ) og de 65 kontroltegn.
Den udvidede Binærkodet Decimal Interchange Code (EBCDIC) tegnsæt indeholder 65 kontrolkoder, herunder alle de ASCII kontrolkoder plus yderligere koder, som er for det meste bruges til at styre IBM periferiudstyr.
| 0x00 | 0x10 | |
|---|---|---|
| 0x00 | NUL | DLE |
| 0x01 | SOH | DC1 |
| 0x02 | STX | DC2 |
| 0x03 | ETX | DC3 |
| 0x04 | EOT | DC4 |
| 0x05 | ENQ | NAK |
| 0x06 | ACK | SYN |
| 0x07 | BEL | ETB |
| 0x08 | BS | KAN |
| 0x09 | HT | EM |
| 0x0A | LF | SUB |
| 0x0B | VT | ESC |
| 0x0C | FF | FS |
| 0x0D | CR | GS |
| 0x0E | SÅ | RS |
| 0x0F | SI | OS |
| 0x7F | DEL |
Historie
Proceduretegn i Morse -kode er en form for kontrolkarakter.
En form for kontroltegn blev introduceret i Baudot -koden fra 1870 : NUL og DEL. Murray -koden fra 1901 tilføjede vognretur (CR) og linjefoder (LF), og andre versioner af Baudot -koden inkluderede andre kontroltegn.
Den klokketegnet (BEL), der ringede en klokke til alert operatører, var også en tidlig teletype styretegnet.
Kontroltegn er også blevet kaldt "formateffektorer".
I ASCII
Kontroltegnene i ASCII, der stadig er i almindelig brug, omfatter:
- 0 ( nul ,
NUL,\0,^@), oprindeligt beregnet til at være en ignoreret karakter, men nu bruges af mange programmeringssprog , herunder C til at markere afslutningen på en snor . - 7 ( klokke ,
BEL,\a,^G), som kan forårsage, at enheden til at udsende en advarsel, såsom en klokke eller bip eller skærmen blinker. - 8 ( backspace ,
BS,\b,^H), kan overskrive det foregående tegn. - 9 ( vandret fane ,
HT,\t,^I), flytter trykning position lige til det næste tabulatorstop. - 10 ( linjeskift ,
LF,\n,^J), flytter printerhovedet en linje ned, eller til venstre kant og ned. Anvendes som slutlinjemarkør i de fleste UNIX -systemer og varianter. - 11 ( fanen lodret ,
VT,\v,^K), lodret tabulering. - 12 ( formular foder ,
FF,\f,^L), til at forårsage en printer til eject papir til toppen af den næste side, eller en video terminal for at rydde skærmen. - 13 ( carriage return ,
CR,\r,^M), bevæger trykpositionen til starten af linjen, så overprint. Anvendes som slutmarkør i Classic Mac OS , OS-9 , FLEX (og varianter). EtCR+LFpar bruges af CP/M -80 og dets derivater, herunder DOS og Windows , og af Application Layer -protokoller såsom FTP , SMTP og HTTP . - 26 ( Kontrol-Z ,
SUB,EOF,^Z). Fungerer som en end-of-file for Windows teksttilstandsfilen i/o. - 27 ( flugt ,
ESC,\e( GCC kun),^[). Introducerer en flugtsekvens .
Kontroltegn kan beskrives som at gøre noget, når brugeren indtaster dem, f.eks. Kode 3 ( End-of-Text-tegn , ETX, ^C) for at afbryde den igangværende proces eller kode 4 ( End-of-Transmission-tegn , EOT, ^D), bruges til at afslutte tekstindtastning eller til at forlade en Unix -skal . Disse anvendelser har normalt lidt at gøre med deres brug, når de er i tekst, der udsendes, og på moderne systemer involverer normalt ikke overførsel af kodenummeret overhovedet (i stedet får programmet det faktum, at brugeren holder Ctrl -tasten nede og trykke på tasten markeret med et 'C').
Der var defineret en del kontroltegn (33 i ASCII, og ECMA-48-standarden tilføjer 32 flere). Dette var fordi tidlige terminaler havde meget primitive mekaniske eller elektriske kontroller, der gjorde enhver form for statsligt huskende API ret dyr at implementere, så en anden kode for hver funktion lignede et krav. Det blev hurtigt muligt og billigt at fortolke sekvenser af koder for at udføre en funktion, og enhedsproducenter fandt en måde at sende hundredvis af enhedsinstruktioner på. Specifikt brugte de ASCII -kode 27 (escape) efterfulgt af en række tegn kaldet en "kontrolsekvens" eller "flugtsekvens". Mekanismen blev opfundet af Bob Bemer , far til ASCII. F.eks. Ville sekvensen af kode 27, efterfulgt af de udskrivbare tegn "[2; 10H", få en DEC VT-102- terminal til at flytte sin markør til den 10. celle på skærmens 2. linje. Der findes flere standarder for disse sekvenser, især ANSI X3.64 . Men antallet af ikke-standardiserede variationer i brugen er stort, især blandt printere, hvor teknologien er avanceret langt hurtigere, end noget standardorgan muligvis kan følge med.
I Unicode
I Unicode er "Kontroltegn" U+0000 — U+001F (C0-kontroller), U+007F (slet) og U+0080 — U+009F (C1-kontroller). Deres generelle kategori er "Cc". Formateringskoder er forskellige i Generel kategori "Cf". Cc-kontroltegnene har intet navn i Unicode, men får i stedet etiketter som "<control-001A>".
Skærm
Der er en række teknikker til visning af tegn, der ikke udskrives, som kan illustreres med klokkekarakteren i ASCII- kodning:
- Kodepunkt : decimal 7, hexadecimal 0x07
- En forkortelse, ofte tre store bogstaver: BEL
- Et specialtegn, der kondenserer forkortelsen: Unicode U+2407 (␇), "symbol for klokke"
- En ISO 2047 grafisk fremstilling: Unicode U+237E (⍾), "grafik til klokke"
- Caret -notation i ASCII, hvor kodepunkt 00xxxxx er repræsenteret som en tegnet efterfulgt af stort bogstav ved kodepunkt 10xxxxx: ^G
- En escape -sekvens , som i C / C ++ tegnstrengkoder: \ a , \ 007 , \ x07 osv.
Hvordan kontroltegnene tilknyttes tastaturer
ASCII-baserede tastaturer har en nøgle mærket " Control ", "Ctrl" eller (sjældent) "Cntl", der bruges meget som en shift-tast, og der trykkes på i kombination med et andet bogstav eller symboltast. I en implementering genererer kontrolnøglen koden 64 steder under koden for det (generelt) store bogstav, der trykkes på i kombination med (dvs. træk 64 fra ASCII -kodeværdien i decimal af det (generelt) store bogstav). Den anden implementering er at tage ASCII -koden produceret af nøglen og bitvis OG den med 31, hvilket tvinger bits 6 og 7 til nul. Hvis du f.eks. Trykker på "kontrol" og bogstavet "g" eller "G" (kode 107 i oktal eller 71 i base 10 , hvilket er 01000111 i binært ), produceres koden 7 (Bell, 7 i base 10 eller 00000111 i binært). NULL-tegnet (kode 0) repræsenteres af Ctrl-@, hvor "@" er koden umiddelbart før "A" i ASCII-tegnsættet. For nemheds skyld accepterer mange terminaler Ctrl-Space som et alias for Ctrl-@. I begge tilfælde producerer dette en af de 32 ASCII-kontrolkoder mellem 0 og 31. Denne tilgang er ikke i stand til at repræsentere DEL-tegnet på grund af dens værdi (kode 127), men Ctrl-? bruges ofte til denne karakter, som at trække 64 fra et '?' giver −1, som hvis maskeret til 7 bits er 127.
Når kontroltasten holdes nede, frembringer bogstavtasterne de samme kontroltegn uanset tilstanden for skift eller caps lock -tasterne. Med andre ord er det ligegyldigt, om nøglen ville have frembragt store eller små bogstaver. Fortolkningen af kontrolnøglen med mellemrum, grafiktegn og cifretaster (ASCII -koder 32 til 63) varierer mellem systemer. Nogle vil producere den samme tegnkode, som hvis kontroltasten ikke blev holdt nede. Andre systemer oversætter disse nøgler til kontroltegn, når kontrolnøglen holdes nede. Fortolkningen af kontrolnøglen med ikke-ASCII ("fremmede") nøgler varierer også mellem systemer.
Kontroltegn gengives ofte til en udskrivbar form kendt som caret-notation ved at udskrive en tegnet (^) og derefter ASCII-tegnet, der har en værdi af kontroltegnet plus 64. Kontroltegn, der genereres ved hjælp af bogstavtaster, vises således med store bogstaver brevets form. F.eks. Repræsenterer ^G kode 7, som genereres ved at trykke på G -tasten, når kontroltasten holdes nede.
Tastaturer har også typisk et par enkelte taster, der producerer kontroltegnkoder. For eksempel producerer nøglen mærket "Backspace" typisk kode 8, "Tab" kode 9, "Enter" eller "Return" kode 13 (selvom nogle tastaturer muligvis producerer kode 10 for "Enter").
Mange tastaturer indeholder taster, der ikke svarer til nogen ASCII -udskrivnings- eller kontroltegn, f.eks. Pilekontrolpile og tekstbehandlingsfunktioner . De tilhørende tastetryk kommunikeres til computerprogrammer ved en af fire metoder: tilegnelse af ellers ubrugte kontroltegn; ved hjælp af anden kodning end ASCII; anvendelse af kontrolsekvenser med flere tegn; eller brug af en ekstra mekanisme uden for generering af tegn. "Dumme" computerterminaler bruger typisk kontrolsekvenser. Tastaturer, der er knyttet til enkeltstående computere fremstillet i 1980'erne, bruger typisk en (eller begge) af de to første metoder. Moderne computertastaturer genererer scancodes, der identificerer de specifikke fysiske taster, der trykkes på; computersoftware bestemmer derefter, hvordan de taster, der trykkes, skal håndteres, herunder en af de fire metoder, der er beskrevet ovenfor.
Designformålet
Kontroltegnene blev designet til at falde ind i et par grupper: udskrivning og visningskontrol, datastrukturering, transmissionskontrol og diverse.
Udskrivning og visningskontrol
Udskrivning af kontroltegn blev først brugt til at styre den fysiske mekanisme for printere, den tidligste outputenhed. En tidlig implementering af denne idé var out-of-band- ASA-vognkontrolpersonerne . Senere blev kontroltegn integreret i datastrømmen, der skulle udskrives. Vognreturtegnet (CR), når den sendes til en sådan enhed, får den til at placere tegnet ved kanten af papiret, hvor skrivningen begynder (den kan eller ikke også flytte udskrivningspositionen til den næste linje). Line feed character (LF/NL) får enheden til at sætte udskrivningspositionen på den næste linje. Det kan (eller måske ikke), afhængigt af enheden og dens konfiguration, også flytte udskrivningspositionen til starten af den næste linje (hvilket ville være den længst til venstre for scripts fra venstre til højre , f.eks. Alfabeter, der bruges til Western sprog og den højre position for højre-til-venstre- scripts, såsom hebraiske og arabiske alfabeter). De lodrette og vandrette faneblade (VT og HT/TAB) får udskriftsenheden til at flytte udskrivningspositionen til det næste fanestop i læseretningen. Formfremføringstegnet (FF/NP) starter et nyt ark papir og flytter muligvis ikke til starten af den første linje. Backspace -tegnet (BS) flytter udskrivningspositionen et tegnrum tilbage. På printere bruges dette oftest, så printeren kan overskrive tegn for at gøre andre, normalt ikke tilgængelige, tegn. På terminaler og andre elektroniske udgangsenheder er der ofte konfigurationsvalg for software (eller hardware), som tillader en destruct backspace (dvs. en BS, SP, BS sekvens), som sletter, eller en ikke-destruktiv, som ikke gør det. Skift ind og skift tegn (SI og SO) valgte alternative tegnsæt, skrifttyper, understregning eller andre udskrivningstilstande. Escape -sekvenser blev ofte brugt til at gøre det samme.
Med fremkomsten af computerterminaler , der ikke fysisk printede på papir og så tilbød mere fleksibilitet med hensyn til placering af skærm, sletning og så videre, blev udskrivningskontrolkoder tilpasset. Formularfeeds ryddede f.eks. Normalt på skærmen, og der var ingen ny papirside at flytte til. Mere komplekse flugtsekvenser blev udviklet for at drage fordel af fleksibiliteten i de nye terminaler og faktisk af nyere printere. Konceptet med en kontrolkarakter havde altid været noget begrænsende og var ekstremt tilfældet, når det blev brugt med ny, meget mere fleksibel hardware. Kontrolsekvenser (undertiden implementeret som flugtsekvenser) kunne matche den nye fleksibilitet og kraft og blev standardmetoden. Der var imidlertid og forbliver et stort udvalg af standardsekvenser at vælge imellem.
Datastrukturering
Separatorerne (File, Group, Record og Unit: FS, GS, RS og US) blev lavet til at strukturere data, normalt på et bånd, for at simulere hullede kort . End of medium (EM) advarer om, at båndet (eller et andet optagemedie) slutter. Mens mange systemer bruger CR/LF og TAB til strukturering af data, er det muligt at støde på separatorstyringstegnene i data, der skal struktureres. Separatorens kontroltegn er ikke overbelastede; der er ingen generel brug af dem, bortset fra at opdele data i strukturerede grupperinger. Deres numeriske værdier er sammenhængende med mellemrumstegnet, som kan betragtes som et medlem af gruppen, som en ordseparator.
Transmissionskontrol
Transmissionskontrollens tegn var beregnet til at strukturere en datastrøm og til at styre genoverførsel eller yndefuld fejl efter behov i lyset af transmissionsfejl.
Starten på overskrift (SOH) tegn var at markere en sektion uden for data i en datastrøm-den del af en strøm, der indeholder adresser og andre husholdningsdata. Starten på teksttegn (STX) markerede afslutningen på overskriften og starten på den tekstlige del af en strøm. Slutningen af teksttegn (ETX) markerede afslutningen på dataene i en meddelelse. En udbredt konvention er at gøre de to tegn forud for ETX til en kontrolsum eller CRC til fejlsøgningsformål. Slutningen af transmissionsblokkarakter (ETB) blev brugt til at angive slutningen af en blok af data, hvor data blev opdelt i sådanne blokke til transmissionsformål.
Escape -tegnet ( ESC ) var beregnet til at "citere" det næste tegn, hvis det var et andet kontroltegn ville det udskrive det i stedet for at udføre kontrolfunktionen. Det bruges næsten aldrig til dette formål i dag. Forskellige udskrivbare tegn bruges som synlige " flugttegn ", afhængigt af kontekst.
Det substituerende tegn ( SUB ) var beregnet til at anmode om en oversættelse af det næste tegn fra et tegn, der kan udskrives til en anden værdi, normalt ved at indstille bit 5 til nul. Dette er praktisk, fordi nogle medier (f.eks. Papirark fremstillet af skrivemaskiner) kun kan sende tegn, der kan udskrives. Men på MS-DOS-systemer med filer åbnet i teksttilstand er "slut på tekst" eller "slut på fil" markeret med dette Ctrl-Z- tegn i stedet for Ctrl-C eller Ctrl-D , som er almindelige på andre operativsystemer.
Annulleringstegnet ( CAN ) signalerede, at det forrige element skulle kasseres. Det negative anerkendelsestegn ( NAK ) er et klart flag for normalt at bemærke, at modtagelse var et problem, og ofte at det aktuelle element skulle sendes igen. Bekræftelsestegnet ( ACK ) bruges normalt som et flag for at angive, at der ikke er opdaget noget problem med det aktuelle element.
Når et transmissionsmedium er halv dupleks (det vil sige, det kan kun sende i en retning ad gangen), er der normalt en masterstation, der kan transmittere når som helst, og en eller flere slave -stationer, der sender, når de har tilladelse. Forespørgselstegnet ( ENQ ) bruges generelt af en masterstation til at bede en slave -station om at sende sin næste besked. En slavestation angiver, at den har afsluttet sin transmission ved at sende slutningen af transmissionstegnet ( EOT ).
Enhedskontrolkoderne (DC1 til DC4) var oprindeligt generiske, der skulle implementeres efter behov af hver enhed. Et universelt behov i datatransmission er imidlertid at anmode afsenderen om at stoppe med at sende, når en modtager midlertidigt ikke kan acceptere flere data. Digital Equipment Corporation opfandt en konvention, der brugte 19 (enhedskontrol 3 tegn ( DC3 ), også kendt som control-S eller XOFF ) til "S" top-transmission, og 17 (enhedskontrol 1 tegn ( DC1 ), også kendt som kontrol -Q eller XON ) for at starte transmissionen. Det er blevet så udbredt, at de fleste ikke er klar over, at det ikke er en del af den officielle ASCII. Denne teknik, dog implementeret, undgår yderligere ledninger i datakablet, der kun er afsat til transmissionsstyring, hvilket sparer penge. En fornuftig protokol til brugen af sådanne transmissionsstrømningsstyringssignaler skal anvendes for at undgå potentielle fastlåste forhold.
Datalink -flugttegnet ( DLE ) var beregnet til at være et signal til den anden ende af et datalink, at det følgende tegn er et kontroltegn, såsom STX eller ETX. For eksempel kan en pakke være struktureret på følgende måde ( DLE ) <STX> <PAYLOAD> ( DLE ) <ETX>.
Diverse koder
Kode 7 ( BEL ) er beregnet til at forårsage et lydsignal i den modtagende terminal.
Mange af ASCII -kontrolpersonerne var designet til tidens enheder, der ikke ofte ses i dag. For eksempel blev kode 22, "synkron inaktiv" ( SYN ), oprindeligt sendt af synkrone modemer (som konstant skal sende data), når der ikke var nogen faktiske data at sende. (Moderne systemer bruger typisk en startbit til at annoncere begyndelsen på et transmitteret ord - dette er et træk ved asynkron kommunikation. Synkron kommunikationsforbindelser blev oftere set med mainframes, hvor de typisk blev kørt over virksomhedsleasede linjer for at forbinde en mainframe til en anden mainframe eller måske en minicomputer.)
Kode 0 (ASCII -kodenavn NUL ) er et specielt tilfælde. I papirbånd er det tilfældet, når der ikke er huller. Det er bekvemt at behandle dette som et fyldtegn uden anden betydning. Da positionen for et NUL -tegn ikke har huller, kan det udskiftes med et hvilket som helst andet tegn på et senere tidspunkt, så det blev typisk brugt til at reservere plads, enten til at rette fejl eller til at indsætte oplysninger, der ville være tilgængelige på et senere tidspunkt eller et andet sted. I computing bruges det ofte til polstring i poster med fast længde og mere almindeligt for at markere enden af en streng.
Kode 127 ( DEL , aka "rubout") er ligeledes et specielt tilfælde. Dens 7-bit kode er all-bits-on i binær, som i det væsentlige slettede en tegncelle på et papirbånd, når den blev overstanset. Papirbånd var et almindeligt lagringsmedium, da ASCII blev udviklet, med en computerhistorie, der stammer fra WWII -kodebrydende udstyr i Biuro Szyfrów . Papirbånd blev forældet i 1970'erne, så dette smarte aspekt af ASCII så sjældent nogen brug efter det. Nogle systemer (f.eks. De originale æbler) konverterede det til et backspace. Men fordi koden er i det område, der optages af andre udskrivbare tegn, og fordi den ikke havde nogen officiel tildelt glyph, brugte mange computerudstyrsleverandører den som en ekstra udskrivbar karakter (ofte et helt sort "boks" -tegn, der er nyttigt til at slette tekst ved overtryk med blæk).
Ikke-sletbare programmerbare ROM'er implementeres typisk som arrays af smeltbare elementer, der hver repræsenterer en bit , som kun kan skiftes en vej, normalt fra en til nul. I sådanne PROM'er kan DEL- og NUL -tegnene bruges på samme måde som de blev brugt på udstanset tape: den ene til at reservere meningsløse fyldbytes, der kan skrives senere, og den anden til at konvertere skrevne bytes til meningsløse fyldbytes. For PROM'er, der skifter en til nul, vendes rollerne for NUL og DEL; DEL fungerer også kun med 7-bit tegn, som sjældent bruges i dag; for 8-bit indhold kan tegnkoden 255, almindeligvis defineret som et non-breaking space-tegn, bruges i stedet for DEL.
Mange filsystemer tillader ikke kontroltegn i filnavne , da de muligvis har reserverede funktioner.
Se også
- Piletaster#HJKL-taster HJKL som piletaster, der bruges på ADM-3A-terminalen
- C0 og C1 kontrolkoder
- Escape -sekvens
- In-band signalering
- Mellemrumstegn
Noter og referencer
eksterne links
- ISO IR 1 C0 Sæt med ISO 646 (PDF)