이상한 통제 행동

이상한 통제 행동

cat다음을 수행하여 매우 간단한 텍스트 편집기로 사용할 수 있습니다 cat > foo.txt.
그런 다음 다음을 입력합니다.

bar
baz

ctrl그런 다음 +를 누르면 D이제 다음과 같이 보입니다.

$ cat > foo.txt
bar
baz^D

커서를 에 놓습니다 ^. 다시 누르면 파일이 저장됩니다. 그러나 다른 버튼을 누르면(아무 것도 아닐 수도 있지만 대부분은 아무 것도 누르지 않음) 파일 편집을 계속합니다.

이것이 정상적인 행동입니까?

답변1

예. 그것은 그것과 관련이 있습니다 ^D: 그것은 단지 현재 read(2)통화를 중지합니다.

프로그램이 이 작업을 수행 하고 중간 키를 int rdbytes = read(fd, buffer, sizeof buffer);누르면 현재 버퍼에서 읽은 바이트가 반환되고 해당 바이트 수가 반환됩니다. 라인이 종료될 때에도 동일한 일이 발생합니다. 항상 마지막 라인이 전달됩니다.^Dread()\n

따라서 return은 ^D줄의 시작 부분이나 다른 줄 뒤에 만 EOF를 나타내는 의도된 효과를 ^D갖습니다 .read()0

답변2

예, 이는 정상적인 동작입니다. 단일 Control-D는 일반적으로 줄 시작 부분에서만 중단됩니다. 종료하려면 Ctrl-D를 누르세요.

$ cat > foo.txt
bar
baz
^D

관련 정보