답변1
불다했다표준 입력(stdin)(즉, 터미널)에서 입력을 받습니다.
터미널은 다음 두 가지 중 하나일 수 있습니다.모델:날것의또는요리("문자 모드" 및 "라인 모드"라고도 알려져 있으며 "raw" 및 "cooked"라는 용어는 주로 Unix 세계에서 사용됩니다.) ("cooked"라는 단어는 "raw"와 반대되는 말장난으로 도입되었습니다) ). 원시 모드에서는 터미널이 입력을 즉시 애플리케이션에 전송합니다. 쿠킹 모드에서 터미널은 전체 라인을 읽고 (매우 원시적인) 라인 편집 메커니즘을 제공하며, 사용자가 이를 누를 때만 데이터를 애플리케이션으로 전송합니다 Enter.
터미널은 쿠킹 모드에서 시작됩니다. Bash와 같이 입력에 대한 더 많은 제어를 원하는 애플리케이션은 사용자가 명령을 입력할 때까지 기다리는 동안 터미널을 원시 모드로 설정합니다.
답변2
터미널 장치 파일에 첨부된 파일 설명자(예: fd0)가 있는 모든 프로그램은 터미널이 "전송"할 때까지 해당 줄의 텍스트를 볼 수 없도록 터미널이 키보드를 통해 수신된 텍스트의 각 줄을 버퍼링한다고 생각합니다. 을 누르세요 Enter.
(셸의 줄 편집기가 이 문제를 어떻게 해결하는지 - 확실하지는 않지만 클릭하기 전에 확실히 텍스트를 얻습니다 Enter.)
또한 쉘이 하위 프로세스를 시작하면(이 경우 ping
) 하위 프로세스가 실행되는 동안 정지/중지 상태가 되므로 wait
터미널이 텍스트를 유지하지 않더라도 쉘은 이를 무시하고 의미가 있다고 가정합니다. 하위 프로세스 프로세스의 경우.
화면에 보이는 텍스트는 다음과 같습니다.단말기표시되고 있지만 자식 프로세스가 종료되고 쉘이 "깨어나고" 텍스트가 쉘 라인 편집기로 전송될 때까지 어떤 프로그램도 이를 잡아서 아무 작업도 수행하지 않습니다. 비록 모든 터미널이 반드시 그렇게 할 것이라고는 생각하지 않습니다.