예.

예.

다음은 ASCII 형식의 제어 문자입니다(노란색으로 강조 표시됨).

여기에 이미지 설명을 입력하세요.

이러한 제어 문자 중 하나를 보내려면라인 규율예를 들어 제어 문자를 Ctrl+someChar보내려면 터미널에서 입력합니다 .0x03Ctrl+C

이제 Linux는 이미지에 표시된 제어 문자를 모두 지원합니까, 아니면 일부만 지원합니까?


편집하다:

"지원됨"이란 다음으로 보낼 수 있는지 여부를 의미합니다.라인 규율터미널에서. 하지만 방금 다음을 찾았습니다.문서, 14개의 제어 문자만 지원된다고 나와 있으므로(ASCII 테이블의 33개 대신) 내 질문에 대한 대답은 다음과 같습니다.아니요, ASCII 테이블의 모든 제어 문자가 지원되는 것은 아닙니다.

답변1

예.

터미널은 직렬 장치(실제 터미널인 경우)를 통해 원하는 문자(컨트롤 또는 기타)를 라인 분야로 보낸 다음 애플리케이션으로 보낼 수 있습니다.

라인 규율이 다음과 같은 경우비표준 입력 모드, 내가 당신의 "에 대답하는 동안라인 규율이 제어 문자를 처리하지 못하도록 방지” 문제가 발생하면 응용 프로그램은 라인 규칙이 있는 경우 터미널에서 보낸 문자를 읽을 수 있습니다.표준 입력 모드그러면 단어나 줄 삭제 문자와 같은 문자 편집이 줄 규칙에 따라 실행됩니다.

최신 셸(1980년대 이후)은 비정규 입력 모드를 사용하고 모든 편집 기능을 자체적으로 수행하며 터미널에서 생성된 원시 문자 스트림에서 작동합니다. 이러한 쉘이 다른 프로그램을 호출하면 터미널을 표준 입력 모드로 전환하므로 C 프로그램을 실행할 때 라인 규칙 편집이 적용되는 것을 볼 수 있습니다.

터미널에서 라인 규율로 전송될 수 있으면 "지원됨"을 의미합니다. 그런데 방금 [Linux control_codes(4) 매뉴얼 페이지]를 찾았는데, 여기에는 14개의 제어 문자만 지원된다는 내용이 나와 있습니다.

입력과 출력을 혼동하고 있습니다. 매뉴얼 페이지에는 커널에 내장된 터미널 에뮬레이터가 제어 코드를 해석하는 방법이 나와 있습니다.에 보내다터미널은 제어 코드에 대해 알려주지 않습니다.다음에서 수신됨말단.

ASCII의 제어 문자

ASCII는 7비트 문자 집합입니다. 또한 1980년대부터, 실제로는 1980년대 훨씬 이전부터 8비트 문자 집합에 대한 아이디어가 있었습니다. 8비트 문자 세트에는 두 번째 제어 코드 세트인 "C1" 제어 코드가 있습니다.

라인에 8개의 데이터 비트가 있도록 직렬 장치를 구성하고(실제 터미널인 경우) 라인 규칙은 8비트 문자를 지원하며, 다시 비정규 모드에서는 전체 8비트 세트의 각 문자를 보낼 수 있습니다. C0 제어 코드, C1 제어 코드 등 터미널에서 애플리케이션까지.

답변2

Linux의 다양한 레벨과 빌딩 블록에 대해 혼란스러워 보입니다.

이것라인 규율Ctrl-C만 해석되며( SIGINT포그라운드 그룹의 모든 프로세스에 신호를 보냅니다), 활성화된 경우 소프트웨어 흐름 제어 문자인 Ctrl-S 및 Ctrl-Q가 해석됩니다.

다양한 종류단말기다양한 제어 시퀀스를 설명하세요.xterm주로 기반으로VT100제어 순서를 해석하거나편안당신이 발견한 순서입니다.

다른 앱다른 제어 시퀀스도 해석할 수 있습니다. 예를 들어 메인프레임 처리를 시뮬레이션하는 레거시 애플리케이션은 FS, GS및 구분 기호를 해석할 수 있습니다 RS( USLinux에서는 레코드 지향이 아니기 때문에 이를 사용하는 사람이 없습니다).

"이 제어 순서는 항상 이 특정한 것을 의미한다"고 말하는 중심점이 없습니다. 또한 어떤 방식으로든 모든 ASCII 제어 문자를 해석할 필요가 없습니다.

편집하다

생산 라인 규율관련이 없다라인 편집. 이것철사회선 규칙에서 "회선 연결"은 외부 장치(단말기)를 컴퓨터에 연결하는 전기적 연결(예: 전화선)을 의미합니다. 회선 분야의 임무는 해당 연결의 트래픽을 제어하는 ​​것입니다. 이것이 바로 소프트웨어 흐름 제어 문자를 해석하는 이유입니다. 커널에는 다양한 제어 유형에 대한 다른 라인 규칙이 있습니다.

라인 편집전적으로 실행 중인 응용 프로그램에 따라 다릅니다. 예를 들어, bashemacs나 vi를 모방하는 방식으로 키 입력을 해석하는 라인 편집기가 있습니다. 이것이 Ctrl-W(emacs 모드에서)가 단어를 삭제하는 이유입니다. 그리고 이번 과제는아무것도 없다ASCII와 완전히 관련되어 있습니다.

다시 한 번 말씀드리지만, Linux 시스템은 여러 부분으로 구성되어 있으며 각 부분은 제어 문자를 고유한 방식으로 해석합니다.

답변3

이것라인 규율터미널 관련의사 터미널. 읽다tty가 공개됐다첫 페이지. 그럼 읽어봐용어(3). 터미널에는 여러 상태가 있을 수 있습니다.스티티(1). 일부 주에서는 제어 문자를 처리하지 않습니다. 다른 주에서는 이러한 사항을 모두 처리하지 않습니다(예: DC3특정 처리가 없을 수 있음).

터미널은 매우 복잡한 것입니다(실제 물리학에서는 레거시입니다.단말기그렇게VT100더 이상 사용되지 않으며 2017년에만 박물관에서 찾을 수 있습니다.가상 터미널이제 실제로 Linux에서 사용됩니다.) 다음과 같은 라이브러리를 사용하는 것이 좋습니다.저주코드를 작성하고 싶다면텍스트 기반 사용자 인터페이스(혹은 비슷한 것독서선행 기반을 원하는 경우). 당신은 또한 볼 수 있습니다용어 모자그리고 읽어보세요ANSI 이스케이프 코드. BTW, 대부분의 대화형 셸(예: 또는 :예응용 프로그램(터미널bash및)...zshvimlibreadlinelibtinfolibncursesgnome-terminalxterm

그런데 2017년에 우리는UTF-8은 어디에나 있습니다(아니요ASCII 코드더 이상), 심지어터미널 에뮬레이터~에 대해 알고 있다UTF-8.유니코드더 복잡한 동작이 필요합니다(사용자가 동일한 입력 줄에서 왼쪽에서 오른쪽으로 및 오른쪽에서 왼쪽으로 쓰는 언어(예: 영어, 히브리어 또는 아랍어)를 혼합하는 것을 고려하세요). 대부분의 터미널 에뮬레이터의 동작은 구성 가능합니다. 예를 들어 오디오 경고음을 활성화 또는 비활성화 BEL하거나 깜박임만 활성화할 수 있습니다.

그리고 다양한 제어 문자에 대한 지원은 서로 다른 레이어에서 발생할 수 있습니다(또는 일부 제어 문자에는 특별한 의미가 없기 때문에 발생하지 않을 수도 있습니다)...

마지막으로,GUI(그리고위젯 툴킷좋다Qt또는GTK+) 그리고웹 인터페이스(다음과 같은 일부 HTTP 서버 라이브러리를 사용할 수 있습니다.리보니온)는 이전보다 더 널리 사용됩니다.

글을 쓰고 싶다면텍스트 기반 사용자 인터페이스오늘의 애플리케이션에는 몇 가지 추가 라이브러리(예: 등...)를 사용하는 것이 좋습니다 ncurses.

그런데 일부 동작은 사용자 또는 의사 터미널별로 조정되거나 구성될 수 있으며 일부 다른 터미널 에뮬레이터도 어느 정도 구성 가능합니다.콘솔 코드(4),로케일(7),아스키(7),UTF-8(7),문자 집합(7),환경(7),개인 유한 회사(7),신호(7),학기(7),용어(7),유니코드(7).

또한 일부 특정 터미널 에뮬레이터를 구성하거나 개선할 수도 있습니다(이것은무료 소프트웨어, 특정 요구 사항에 맞게 소스 코드를 연구하고 패치할 수 있습니다(그리고 유용한 작업을 수행하려는 이상한 제어 문자에 대한 특정 동작을 추가할 수 있습니다). 이상한 제어 문자를 사용하는 특정 터미널 에뮬레이터의 동작은 해당 에뮬레이터에만 해당됩니다. 대부분이 일부를 건너뛰거나 무시할 것입니다.

그러나 당신은 가질 수 있습니다장치 파일(예: 모뎀, 키보드 등) 및 파일(또는소켓(7)-s) 임의의 바이트 시퀀스를 처리합니다(ASCII 또는 UTF-8일 필요는 없습니다.문자 인코딩전통적인오직).

AFAIK, 많은 제어 문자(특히 가로 및 세로 탭, 캐리지 리턴, 폼 피드, 이스케이프 등) - 아마도 대부분은 커널 코드에 구현된 줄 규칙에 의해 처리되지 않습니다. 그러나 이는 애플리케이션 코드(특히 ncurses또는 를 사용하는 코드 readline) 및 터미널 에뮬레이터(예: gnome-terminal또는 )에 xterm알려져 있습니다 .

관련 정보