문제

나는 시험을 위해 공부하고 있으며 UNIX에서 표준 대 비정규 입력/출력이 어떻게 작동하는지에 대해 혼란스러워합니다 (예 : 저주). 나는 표준 입력에 "라인 분야"가 적용되는 버퍼가 있음을 이해합니다. 이것은 버퍼가 비 캐논 입력을 위해 우회된다는 것을 의미합니까, 아니면 단순히 라인 분야가 적용되지 않았다는 것을 의미합니까? 이 프로세스는 입력 및 출력 작업에 대해 어떻게 다릅니 까?

표준 입력을 보여주는 CURSES 프로그램에서, 사용자가 입력 한 입력은 특정 수의 문자가 입력되거나 일정 시간이 통과 된 후 자동으로 입력됩니다. 이러한 것들 중 하나가 "라인 분야"로 간주됩니까, 아니면 전적으로 다른 것입니까?

도움이 되었습니까?

해결책

표준 입력의 경우 - 쉘을 생각하십시오. 실제로, Bash와 친척들은 명령 줄 편집을 가지고 있기 때문에 좋은 구식 Bourne Shell을 생각하십시오. 입력 라인을 입력합니다. 실수를하면 지우기 캐릭터를 사용합니다 (기본값은 역행 키이, 대개; 때때로 삭제) 이전 캐릭터를 지우려면. 완전히 엉망이되면 라인 킬 캐릭터로 전체 라인을 취소 할 수 있습니다 (완전히 표준화되지 않음, 종종 컨트롤 X). 일부 시스템에서는 단어를 지우게됩니다. 제어 -W. 이 모든 것은 표준 입력입니다. 라인 문자가 끝날 때까지 전체 라인이 수집되어 편집됩니다. 반품 - 눌렀습니다. 따라서 전체 라인은 대기 프로그램에 사용할 수 있습니다. 에 따라 read() 미결제 시스템 호출은 전체 라인을 읽을 수 있습니다 (하나 이상의 통화로 read()).

비 캐논 적 입력의 경우-생각 vi 또는 vim 또는 무엇이든 - 캐릭터를 누르면 프로그램에서 즉시 사용할 수 있습니다. 당신은 귀국을 치기 전까지는 계속되지 않습니다. 시스템은 문자를 편집하지 않습니다. 그들은 입력하자마자 프로그램에 제공됩니다. 사물을 적절하게 해석하는 것은 프로그램에 달려 있습니다. 지금, vim 표준 입력과 비슷한 여러 가지 일을합니다. 예를 들어, 백 스페이스는 뒤로 이동하고 입력 모드에서는 무엇이 있었는지 지워집니다. 하지만 그게 때문입니다 vim 그것을 그렇게 행동하게 만들기로 선택합니다.

표준 및 비 캐논 적 생산량은 훨씬 덜 심각한 사업입니다. 라인 피드 전에 캐리지 퇴행을 반향 할 것인지, 지연을 수행할지 여부 (전자 장치에 필요하지 않은 경우 출력 장치가 110 Baud Teletype). 또한 케이스 감수성 출력 장치와 같은 작업을 수행 할 수 있습니다. 소문자 문자는 캡에서 출력되며 상위 문자는 백 슬래시 및 캡입니다.

예전에는 모든 상위 문자를 로그인 프롬프트에 입력 한 경우 로그인 프로그램이 각 실제 자본 앞의 백 슬래시로 모든 캡이 출력되는 모드로 자동 변환됩니다. 나는 이것이 더 이상 전자 터미널에서 수행되지 않는다고 생각합니다.


논평에서 Titaniumdecoy는 다음과 같이 물었습니다.

그렇다면 비 캐논 입력으로 입력 버퍼가 완전히 우회되어 있습니까? 또한 라인 분야는 어디에 들어 오나요?

비 캐논 입력을 사용하면 입력 버퍼가 여전히 사용됩니다. A가있는 프로그램이없는 경우 read() 터미널에서 입력을 기다리는 호출은 문자가 입력 버퍼에 고정됩니다. 일어나지 않는 것은 입력 버퍼를 편집하는 것입니다.

라인 분야는 입력 편집이하는 조작 세트와 같은 것입니다. 따라서 라인 징계의 한 측면은 지우기 캐릭터가 표준 입력 모드에서 이전 캐릭터를 지우는 것입니다. 당신이 가지고 있다면 icase (입력 케이스 매핑) 세트를 설정 한 다음 상위 사례 문자가 백 슬래시가 앞서 가면 하단에 매핑됩니다. 그것은 라인 징계, 내가 믿는 것, 또는 라인 징계의 측면입니다.


나는 EOF 처리를 언급하는 것을 잊었다 (제어 -D)는 표준 모드로 처리됩니다. 실제로는 '누적 된 입력을 사용할 수있게한다는 것을 의미합니다. read()';; 축적 된 입력이없는 경우 (입력 한 경우 제어 -D 라인의 시작 부분에서) read() 제로 바이트를 반환 한 다음 프로그램에 의해 EOF로 해석됩니다. 물론, 그 후 키보드에 더 많은 캐릭터를 입력 할 수 있으며, EOF를 무시하거나 비 캐논 모드로 실행되는 프로그램은 매우 행복 할 것입니다.

물론, 표준 모드에서는 키보드에 입력 한 문자가 일반적으로 화면에 반향됩니다. 그 반향이 발생하는지 여부를 제어 할 수 있습니다. 그러나 이것은 표준 입력에 다소 접선입니다. 정상 편집은 Echo가 꺼져 있어도 발생합니다.

마찬가지로, 인터럽트 및 종료 신호는 표준 모드 처리의 인공물입니다. 작업 제어 신호도 마찬가지입니다 컨트롤 Z 현재 프로세스를 중단하고 쉘로 돌아갑니다. 마찬가지로, 흐름 제어 (통제 수단, 컨트롤 Q 출력을 중지하고 시작하려면)은 표준 모드에 의해 제공됩니다.

Rochkind 's의 4 장 고급 유닉스 프로그래밍, 2nd Edn 터미널 I/O를 다루고이 정보의 많은 부분을 제공합니다. 다른 UNIX 프로그래밍 책 (적어도 좋은 책) 도이 책을 다룰 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top