Znak kontrolny - Control character

W informatyce i telekomunikacji znak kontrolny lub znak niedrukowany ( NPC ) to punkt kodowy ( liczba ) w zestawie znaków , który nie reprezentuje symbolu pisanego. Są one używane jako sygnalizacja wewnątrzpasmowa, aby wywołać efekty inne niż dodanie symbolu do tekstu. Wszystkie inne znaki są głównie drukowanymi , drukowalnymi lub graficznymi , z wyjątkiem być może znaku " spacji " ( patrz Znaki drukowalne ASCII ) .

Wszystkie wpisy w tabeli ASCII poniżej kodu 32 (technicznie zestaw kodów kontrolnych C0 ) są tego rodzaju, w tym CR i LF używane do oddzielania wierszy tekstu. Kod 127 ( DEL ) jest również znakiem kontrolnym. Rozszerzone zestawy ASCII zdefiniowane przez ISO 8859 dodały kody od 128 do 159 jako znaki kontrolne, zostało to zrobione głównie po to, aby usunąć wysoki bit, nie zmieniłoby to znaku drukowania na kod kontrolny C0, ale było tu kilka przypisań, w szczególności NEL . Ten drugi set nazywa się setem C1 .

Te 65 kodów kontrolnych zostało przeniesionych do Unicode . Unicode dodał więcej znaków, które można uznać za kontrolki, ale rozróżnia te "znaki formatowania" (takie jak niezłączone o zerowej szerokości ) i 65 znaków kontrolnych.

Rozszerzony Binary Coded Decimal Interchange Code zestawu znaków (EBCDIC) zawiera 65 kody sterujące, w tym wszystkie kody ASCII oraz dodatkowe kody, które są najczęściej wykorzystywane do sterowania urządzeniami peryferyjnymi IBM.

0x00 0x10
0x00 NUL DLE
0x01 SOH DC1
0x02 STX DC2
0x03 ETX DC3
0x04 EOT DC4
0x05 ENQ NAK
0x06 POTWIERDZ SYN
0x07 BEL ETB
0x08 BS MÓC
0x09 HT EM
0x0A LF POD
0x0B VT WYJŚCIE
0x0C FF FS
0x0D CR GS
0x0E WIĘC RS
0x0F SI nas
0x7F DEL

Historia

Znaki proceduralne w kodzie Morse'a są formą znaku kontrolnego.

W kodzie Baudota z 1870 roku wprowadzono formę znaków kontrolnych : NUL i DEL. Kod Murraya z 1901 roku dodał powrót karetki (CR) i wysuw wiersza (LF), a inne wersje kodu Baudota zawierały inne znaki kontrolne.

Znak dzwonka (BEL), który dzwonił do operatorów alarmowych, był również wczesnym dalekopisem .

Znaki sterujące zostały również nazwane „efektorami formatowania”.

W ASCII

Znaki kontrolne w ASCII nadal w powszechnym użyciu obejmują:

Znaki sterujące mogą być opisane jako wykonujące czynność, gdy użytkownik je wprowadzi, na przykład kod 3 ( znak końca tekstu , ETX, ^C), aby przerwać uruchomiony proces, lub kod 4 ( znak końca transmisji , EOT, ^D), używany do zakończenia wprowadzania tekstu lub do wyjścia z powłoki uniksowej . Te zastosowania mają zwykle niewiele wspólnego z ich użyciem, gdy sąwyprowadzane w tekście, a w nowoczesnych systemach zwykle w ogóle nie wiąże się z przesyłaniem numeru kodu (zamiast tego program otrzymuje informacjęże użytkownik przytrzymuje klawisz Ctrl i naciskając klawisz oznaczony literą „C”).

Zdefiniowano sporo znaków kontrolnych (33 w ASCII, a standard ECMA-48 dodaje 32 więcej). Wynikało to z faktu, że wczesne terminale miały bardzo prymitywne sterowanie mechaniczne lub elektryczne, które sprawiało, że implementacja dowolnego rodzaju API zapamiętującego stany była dość kosztowna, a zatem inny kod dla każdej funkcji wyglądał jak wymaganie. Szybko stało się możliwe i niedrogie interpretowanie sekwencji kodów w celu wykonania funkcji, a producenci urządzeń znaleźli sposób na wysyłanie setek instrukcji do urządzeń. W szczególności użyli kodu ASCII 27 (wyjście), po którym następowała seria znaków zwana „sekwencją kontrolną” lub „sekwencją ucieczki”. Mechanizm został wymyślony przez Boba Bemera , ojca ASCII. Na przykład sekwencja kodu 27, po której następują drukowane znaki „[2;10H”, spowoduje, że terminal DEC VT-102 przesunie kursor do 10. komórki w 2. wierszu ekranu. Dla tych sekwencji istnieje kilka standardów, w szczególności ANSI X3.64 . Jednak liczba niestandardowych odmian w użyciu jest duża, zwłaszcza wśród drukarek, gdzie technologia rozwija się znacznie szybciej niż jakikolwiek organ normalizacyjny jest w stanie nadążyć.

W Unicode

W Unicode „znaki kontrolne” to U + 0000-U + 001F (kontrolki C0), U + 007F (usuń) i U + 0080-U + 009F (kontrolki C1). Ich ogólna kategoria to „DW”. Kody formatowania są odrębne, w kategorii ogólnej „Cf”. Znaki kontrolne DW nie mają nazwy w Unicode, ale zamiast tego otrzymują etykiety, takie jak „<control-001A>”.

Wyświetlacz

Istnieje kilka technik wyświetlania znaków niedrukowalnych, które można zilustrować znakiem dzwonka w kodowaniu ASCII :

  • Punkt kodowy : dziesiętny 7, szesnastkowy 0x07
  • Skrót, często trzy wielkie litery: BEL
  • Znak specjalny kondensujący skrót: Unicode U+2407 (␇), „symbol dzwonka”
  • ISO 2047 graficznym przedstawieniem: unicode U + 237E (⍾) "graficzny dzwonu"
  • Daszek zapis w kodzie ASCII, gdzie punkt kod 00XXXXX jest reprezentowany jako daszek następnie literą na punkt kodowy 10xxxxx: ^ G
  • Sekwencja ucieczki , jak w C / C ++ kodów ciąg znaków: \ a , \ 007 , \ X07 , itd.

Jak znaki sterujące są mapowane na klawiatury

Klawiatury oparte na ASCII mają klawisz oznaczony " Control ", "Ctrl" lub (rzadko) "Cntl", który jest używany podobnie jak klawisz Shift, wciskany w połączeniu z inną literą lub klawiszem symbolu. W jednej realizacji, klawisz sterujący generuje kod 64 miejsc poniżej kodu dla (ogólnie) dużej litery, którą jest wciśnięty w połączeniu z (tj. odjęcie 64 od wartości kodu ASCII w postaci dziesiętnej od (ogólnie) dużej litery). Inną implementacją jest wzięcie kodu ASCII utworzonego przez klucz i bitowego AND z 31, wymuszając bity 6 i 7 na zero. Na przykład naciśnięcie klawisza „control” i litery „g” lub „G” (kod 107 w systemie ósemkowym lub 71 w systemie o podstawie 10 , co oznacza 01000111 w systemie binarnym ), daje kod 7 (Bell, 7 w systemie o podstawie 10 lub 00000111 w systemie dwójkowym). dwójkowy). Znak NULL (kod 0) jest reprezentowany przez Ctrl-@, „@” to kod bezpośrednio przed „A” w zestawie znaków ASCII. Dla wygody wiele terminali akceptuje Ctrl-Space jako alias dla Ctrl-@. W obu przypadkach daje to jeden z 32 kodów kontrolnych ASCII z zakresu od 0 do 31. To podejście nie jest w stanie przedstawić znaku DEL ze względu na jego wartość (kod 127), ale Ctrl-? jest często używany dla tego znaku, odejmując 64 od „?” daje -1, co po zamaskowaniu do 7 bitów wynosi 127.

Gdy klawisz Ctrl jest przytrzymywany, klawisze liter generują te same znaki sterujące, niezależnie od stanu klawiszy Shift lub Caps Lock . Innymi słowy, nie ma znaczenia, czy klucz wytworzyłby wielką czy małą literę. Interpretacja klawisza sterującego ze spacją, znakiem graficznym i klawiszami cyfrowymi (kody ASCII od 32 do 63) różni się w zależności od systemu. Niektóre wygenerują ten sam kod znaku, jak gdyby nie przytrzymano klawisza sterującego. Inne systemy tłumaczą te klawisze na znaki sterujące, gdy klawisz sterujący jest przytrzymany. Interpretacja klucza kontrolnego z kluczami spoza ASCII ("obcymi") również różni się w zależności od systemu.

Znaki kontrolne są często renderowane do postaci drukowanej znanej jako notacja karetki przez wydrukowanie karetki (^), a następnie znaku ASCII, który ma wartość znaku kontrolnego plus 64. Znaki kontrolne generowane za pomocą klawiszy liter są zatem wyświetlane z wielkimi literami forma listu. Na przykład ^G reprezentuje kod 7, który jest generowany przez naciśnięcie klawisza G, gdy klawisz Control jest wciśnięty.

Klawiatury zazwyczaj mają również kilka pojedynczych klawiszy, które generują kody znaków sterujących. Na przykład klawisz oznaczony „Backspace” zazwyczaj generuje kod 8, „Tab” kod 9, „Enter” lub „Return” kod 13 (chociaż niektóre klawiatury mogą generować kod 10 dla „Enter”).

Wiele klawiatur zawiera klawisze, które nie odpowiadają żadnemu drukowalnemu znakowi ASCII lub znakowi sterującemu, na przykład strzałki sterujące kursorem i funkcje przetwarzania tekstu . Powiązane naciśnięcia klawiszy są przekazywane do programów komputerowych jedną z czterech metod: przywłaszczenie nieużywanych w inny sposób znaków kontrolnych; przy użyciu innego kodowania niż ASCII; za pomocą wieloznakowych sekwencji sterujących; lub za pomocą dodatkowego mechanizmu poza generowaniem znaków. „Głupi” terminale komputerowe zazwyczaj używają sekwencji sterujących. Klawiatury podłączone do samodzielnych komputerów osobistych wyprodukowane w latach 80. zazwyczaj wykorzystują jedną (lub obie) z dwóch pierwszych metod. Nowoczesne klawiatury komputerowe generują kody skanujące, które identyfikują konkretne naciskane klawisze fizyczne; oprogramowanie komputerowe następnie określa sposób obsługi naciśniętych klawiszy, w tym dowolną z czterech metod opisanych powyżej.

Cel projektu

Znaki kontrolne zostały zaprojektowane tak, aby można je było podzielić na kilka grup: sterowanie drukowaniem i wyświetlaniem, strukturyzacja danych, sterowanie transmisją i różne.

Kontrola drukowania i wyświetlania

Znaki kontrolne drukowania były po raz pierwszy używane do sterowania fizycznym mechanizmem drukarek, najwcześniejszego urządzenia wyjściowego. Wczesną implementacją tego pomysłu były znaki kontrolne karetki ASA poza pasmem . Później znaki kontrolne zostały włączone do strumienia danych do wydrukowania. Znak powrotu karetki (CR), wysłany do takiego urządzenia, powoduje umieszczenie znaku na krawędzi papieru, na którym zaczyna się pisanie (może, ale nie musi, również przesunąć pozycję drukowania do następnego wiersza). Znak przesunięcia wiersza (LF/NL) powoduje, że urządzenie umieszcza pozycję drukowania w następnym wierszu. Może (lub nie), w zależności od urządzenia i jego konfiguracji, również przesunąć pozycję drukowania na początek następnej linii (która byłaby skrajną lewą pozycją dla skryptów od lewej do prawej , takich jak alfabety używane w języki i skrajne prawe położenie dla pisma pisanego od prawej do lewej, takiego jak alfabet hebrajski i arabski). Pionowe i poziome znaki tabulacji (VT i HT/TAB) powodują, że urządzenie wyjściowe przesuwa pozycję drukowania do następnego tabulatora w kierunku odczytu. Znak wysuwu formularza (FF/NP) rozpoczyna nowy arkusz papieru i może, ale nie musi, przejść na początek pierwszego wiersza. Znak backspace (BS) przesuwa pozycję drukowania o jeden znak do tyłu. W drukarkach jest to najczęściej używane, aby drukarka mogła nadrukowywać znaki w celu uzyskania innych, normalnie niedostępnych znaków. Na terminalach i innych elektronicznych urządzeniach wyjściowych często istnieją opcje konfiguracji oprogramowania (lub sprzętu), które pozwalają na destrukcję backspace (tj. sekwencję BS, SP, BS), która kasuje, lub nieniszczącą, która nie usuwa. Przesunięcie i przesunięcie znaków (SI i SO) wybrało alternatywne zestawy znaków, czcionki, podkreślenie lub inne tryby drukowania. Sekwencje ucieczki były często używane do robienia tego samego.

Wraz z pojawieniem się terminali komputerowych, które fizycznie nie drukowały na papierze, a tym samym oferowały większą elastyczność w zakresie umieszczania ekranu, wymazywania itd., dostosowano kody kontrolne drukowania. Na przykład podawanie formularzy zwykle czyściło ekran, ponieważ nie było nowej strony papieru do przeniesienia. Opracowano bardziej złożone sekwencje ucieczki, aby wykorzystać elastyczność nowych terminali, a nawet nowszych drukarek. Koncepcja postaci sterującej zawsze była nieco ograniczająca i była niezwykle trudna, gdy używano jej z nowym, znacznie bardziej elastycznym sprzętem. Sekwencje kontrolne (czasem implementowane jako sekwencje ucieczki) mogły dopasować się do nowej elastyczności i mocy i stały się standardową metodą. Jednak istniała i pozostała duża różnorodność standardowych sekwencji do wyboru.

Strukturyzacja danych

Separatory (Plik, Grupa, Zapis i Jednostka: FS, GS, RS i US) zostały utworzone w celu ustrukturyzowania danych, zwykle na taśmie, w celu symulacji kart dziurkowanych . Koniec nośnika (EM) ostrzega, że ​​taśma (lub inny nośnik danych) się kończy. Podczas gdy wiele systemów używa CR/LF i TAB do strukturyzacji danych, możliwe jest napotkanie znaków kontrolnych separatora w danych, które muszą być ustrukturyzowane. Znaki kontrolne separatora nie są przeciążone; nie ma ich ogólnego zastosowania, z wyjątkiem podziału danych na zorganizowane grupy. Ich wartości liczbowe sąsiadują ze znakiem spacji, który można uznać za członka grupy, jako separatora słów.

Kontrola transmisji

Znaki sterujące transmisją miały na celu ustrukturyzować strumień danych i, w razie potrzeby, zarządzać retransmisją lub łagodnym niepowodzeniem w obliczu błędów transmisji.

Znak początku nagłówka (SOH) miał oznaczać część strumienia danych, która nie zawiera danych — część strumienia zawierającą adresy i inne dane porządkowe. Początek znaku tekstowego (STX) oznaczał koniec nagłówka i początek tekstowej części strumienia. Znak końca tekstu (ETX) oznaczał koniec danych wiadomości. Powszechnie stosowaną konwencją jest uczynienie dwóch znaków poprzedzających ETX sumą kontrolną lub CRC w celu wykrywania błędów. Znak końca bloku transmisji (ETB) służył do wskazania końca bloku danych, w którym dane zostały podzielone na takie bloki dla celów transmisji.

Znak ucieczki ( ESC ) miał na celu "zacytowanie" następnego znaku, jeśli był to inny znak kontrolny, wypisałby go zamiast wykonywać funkcję kontrolną. Dziś prawie nigdy nie jest używany w tym celu. W zależności od kontekstu jako widoczne " znaki ucieczki " używane są różne znaki drukowane .

Znak zastępczy ( SUB ) miał żądać translacji następnego znaku ze znaku drukowanego na inną wartość, zwykle przez ustawienie bitu 5 na zero. Jest to przydatne, ponieważ niektóre nośniki (takie jak arkusze papieru produkowane na maszynach do pisania) mogą przesyłać tylko znaki, które można wydrukować. Jednak w systemach MS-DOS z plikami otwartymi w trybie tekstowym „koniec tekstu” lub „koniec pliku” jest oznaczony tym znakiem Ctrl-Z , zamiast Ctrl-C lub Ctrl-D , które są powszechne w innych system operacyjny.

Znak anulowania ( CAN ) sygnalizował, że poprzedni element powinien zostać odrzucony. Negatywny znak potwierdzenia ( NAK ) jest definitywną flagą, która zwykle wskazuje, że odbiór był problemem i często, że bieżący element powinien zostać wysłany ponownie. Znak potwierdzenia ( ACK ) jest zwykle używany jako flaga wskazująca, że ​​nie wykryto problemu z bieżącym elementem.

Gdy medium transmisyjne jest w trybie półdupleksowym (to znaczy, że może nadawać tylko w jednym kierunku na raz), zwykle istnieje stacja nadrzędna, która może nadawać w dowolnym momencie, oraz jedna lub więcej stacji podrzędnych, które nadają, gdy mają pozwolenie. Znak zapytania ( ENQ ) jest zwykle używany przez stację master do poproszenia stacji slave o wysłanie następnej wiadomości. Stacja slave wskazuje, że zakończyła transmisję, wysyłając znak końca transmisji ( EOT ).

Kody kontrolne urządzenia (od DC1 do DC4) były pierwotnie ogólne, do implementacji w razie potrzeby przez każde urządzenie. Jednak powszechną potrzebą w transmisji danych jest żądanie, aby nadawca przestał nadawać, gdy odbiorca chwilowo nie jest w stanie przyjąć więcej danych. Firma Digital Equipment Corporation wymyśliła konwencję, w której użyto 19 (znak sterowania urządzeniem 3 ( DC3 ), znany również jako control-S lub XOFF ) do transmisji „S”top i 17 (znak sterowania urządzeniem 1 ( DC1 ), czyli sterowanie -Q lub XON ), aby rozpocząć transmisję. Jest tak szeroko stosowany, że większość nie zdaje sobie sprawy, że nie jest częścią oficjalnego ASCII. Ta technika, jednak wdrożona, pozwala uniknąć dodatkowych przewodów w kablu danych przeznaczonych tylko do zarządzania transmisją, co pozwala zaoszczędzić pieniądze. Należy jednak zastosować rozsądny protokół do wykorzystania takich sygnałów sterujących przepływem transmisji, aby uniknąć potencjalnych warunków zakleszczenia.

Znak ucieczki łącza danych ( DLE ) miał być sygnałem dla drugiego końca łącza danych, że następujący znak jest znakiem kontrolnym, takim jak STX lub ETX. Na przykład pakiet może być skonstruowany w następujący sposób ( DLE ) <STX> <PAYLOAD> ( DLE ) <ETX>.

Różne kody

Kod 7 ( BEL ) ma na celu wywołanie sygnału dźwiękowego w terminalu odbiorczym.

Wiele znaków kontrolnych ASCII zostało zaprojektowanych dla urządzeń z tamtych czasów, które nie są często spotykane dzisiaj. Na przykład kod 22 „synchroniczny bezczynność” ( SYN ) został pierwotnie wysłany przez modemy synchroniczne (które muszą stale wysyłać dane), gdy nie było rzeczywistych danych do wysłania. (Nowoczesne systemy zazwyczaj używają bitu startu do ogłaszania początku przesyłanego słowa — jest to cecha komunikacji asynchronicznej . Synchroniczne łącza komunikacyjne były częściej spotykane w komputerach typu mainframe, gdzie zazwyczaj były uruchamiane przez korporacyjne linie dzierżawione, aby połączyć komputer typu mainframe z innym mainframe lub może minikomputer.)

Kod 0 (nazwa kodowa ASCII NUL ) to przypadek szczególny. W taśmie papierowej ma to miejsce, gdy nie ma dziur. Wygodnie jest traktować to jako znak wypełnienia bez znaczenia w inny sposób. Ponieważ pozycja znaku NUL nie ma dziurek, można go później zastąpić dowolnym innym znakiem, więc zwykle używano go do rezerwowania miejsca, albo do poprawiania błędów, albo do wstawiania informacji, które byłyby dostępne w późniejszym czasie lub w innym miejscu. W informatyce jest często używany do wypełniania w rekordach o stałej długości i częściej do oznaczania końca ciągu.

Kod 127 ( DEL , aka "rubout") jest również przypadkiem specjalnym. Jego 7-bitowy kod zawiera wszystkie bity w formacie binarnym, co zasadniczo usuwa komórkę znaku na taśmie papierowej po przebiciu. Papierowa taśma była powszechnym nośnikiem pamięci podczas opracowywania ASCII, z historią obliczeniową sięgającą czasów sprzętu do łamania kodów z czasów II wojny światowej w Biurze Szyfrów . Papierowa taśma stała się przestarzała w latach 70., więc ten sprytny aspekt ASCII rzadko był potem wykorzystywany. Niektóre systemy (takie jak oryginalne Apples) przekonwertowały go na backspace. Ale ponieważ jego kod mieści się w zakresie zajmowanym przez inne znaki drukowalne i ponieważ nie miał on oficjalnie przypisanego glifu, wielu producentów sprzętu komputerowego używało go jako dodatkowego znaku drukowanego (często całkowicie czarnego znaku "pudełka" przydatnego do wymazywania tekstu przez nadrukowywanie tuszem).

Niekasowalne programowalne pamięci ROM są zazwyczaj implementowane jako tablice elementów topliwych, z których każdy reprezentuje bit , który można przełączyć tylko w jeden sposób, zwykle z jednego na zero. W takich PROMach znaki DEL i NUL mogą być używane w taki sam sposób, w jaki były używane na taśmie dziurkowanej: jeden do zarezerwowania bezsensownych bajtów wypełniających, które można zapisać później, a drugi do konwersji zapisanych bajtów na bezsensowne bajty wypełniające. W przypadku PROMów, które przełączają jeden na zero, role NUL i DEL są odwrócone; ponadto DEL działa tylko ze znakami 7-bitowymi, które są dziś rzadko używane; w przypadku zawartości 8-bitowej zamiast znaku DEL można użyć kodu 255, powszechnie określanego jako znak spacji nierozdzielającej.

Wiele systemów plików nie zezwala na znaki kontrolne w nazwach plików , ponieważ mogą one mieć zastrzeżone funkcje.

Zobacz też

Uwagi i referencje

Zewnętrzne linki