명령줄에서 EOF 문자 제공

명령줄에서 EOF 문자 제공

명령 프롬프트에서 문자를 읽고 EOF를 확인하여 프로그램을 종료하고 있습니다. 그러나 +
명령을 실행하면 EOF로 간주되지 않습니다. 어떻게 해야 할지 구체적으로 설명해주세요.CtrlD

Ctrl+가 C작동 중이면 전체 프로세스가 종료됩니다.

답변1

tty "cooked" 모드를 가정하면 - 라인 입력 처리를 종료하고 입력된 데이터를 애플리케이션에 보내는 방식으로 ctrl작동합니다 . D따라서 "abc" 뒤에 -를 입력하면 ctrlD3바이트가 응용 프로그램으로 전송됩니다.

이제 응용 프로그램은 일반적으로 파일의 끝을 어떻게 결정합니까? 읽기가 0바이트를 반환하면 EOF로 간주됩니다. 따라서 읽기가 0바이트를 반환하도록 해야 합니다. 먼저 누른 enter다음 ctrl- 를 누르면 D입력한 모든 내용이 줄바꿈과 함께 애플리케이션으로 전송됩니다. 그런 다음 ctrl입력 D한 모든 데이터(즉, 데이터 없음!)가 애플리케이션으로 전송되어 0바이트를 읽고 EOF로 간주됩니다.

클릭 하기 enter전에 아무 것도 입력 하면 앱은 해당 키 입력을 받고 더 기다립니다. 따라서 먼저 클릭하지 않고 EOF를 생성하려면 연속으로 두 번 클릭하십시오 .ctrlDenterctrlD

따라서 귀하의 질문에 대답하려면 다음을 클릭하십시오. ctrl- 를 클릭하기 전에 먼저 (새 줄 외에) 문자를 입력하셨습니까 D? 그렇다면 연속해서 두 번 시도해 보세요.

예를 들어 다음을 사용하여 이 작업을 수행할 수 있습니다.

$ wc -l
test123     0     1     7

(다음을 클릭하세요 ctrl- 두 번 클릭하세요.)Dtest123

wc유틸리티는 읽은 행, 단어 및 문자 수를 표시합니다. 줄바꿈 문자를 입력하지 않았기 때문에 줄 개수는 0이고, 줄 개수 test123는 1단어, 7자 길이입니다.

답변2

"EOF 문자"가 없습니다. Ctrl-D는 터미널 드라이버에 의해 파일 끝으로 변환됩니다.상황, 해당 콘텐츠를 읽으려는 모든 사람에게 전송됩니다(이 내용이 없으면 read(2)wait라는 입력 또는 기타 입력은 항상 추가 입력을 기다립니다). 이는 tty가 있는 모드에 따라 다르며 이전 논의는 쿠킹 모드에 적용됩니다(드라이버는 라인을 수집하고 제한된 형태의 라인 편집을 허용하며 전체 라인을 리더에게 보냅니다). Cooked 모드는 기본 모드이며 키보드에서 읽는 대부분의 프로그램에서 사용됩니다. 원시 모드(예: 모든 권한을 얻도록 설정된 편집기 vi(1)또는 다른 편집기)에서 프로그램은 입력된 모든 문자를 정확하게 가져옵니다.

관련 정보