이상한 제어 행동


9

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

bar
baz

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

$ cat > foo.txt
bar
baz^D

에 커서를 놓습니다 ^. 그런 다음 한 번 더 누르면 파일이 저장됩니다. 그러나 아무것도 (아마도 아무것도 아니지만 대부분) 다른 것을 누르면 파일을 계속 편집합니다.

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

답변:


13

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

프로그램이 작동 int rdbytes = read(fd, buffer, sizeof buffer);하고 그 ^D사이 를 누르면 read()버퍼에서 현재 읽은 바이트와 함께 숫자를 반환합니다. 라인 종료에서도 마찬가지입니다. \n끝은 항상 전달된다.

따라서 ^D줄의 시작 부분이나 그다음에 a 만 리턴 ^D하여 원하는 효과를 가지며 EOF를 신호합니다.read()0


을 정의하는 대상에 따라 달라집니다 (후행 \n.. 포함). 그러나 ^D연속으로 두 번 누르고 최종 줄 바꿈 문자를 생성하지 않고 EOF 조건을 유발할 수 있습니다 (Enter 키를 누르기 전에 ^D).
Peter.O

당신은 그렇습니다. 나는 선의 시작과 "누른 ^ D"가 버퍼가 비어있는 두 가지 상황이므로 ^ D는 EOF를 나타내는 read()return 을 가질 것 0입니다.
glglgl

11

예, 이것은 정상적인 행동입니다. 단일 Control-D는 일반적으로 줄의 시작 부분 인 경우에만 발생합니다. 이것은 하나의 Control-D로 종료됩니다.

$ cat > foo.txt
bar
baz
^D

줄 끝에서 두
번의

네 말이 맞아. 나는 다른 의미를 암시하지 않았습니다. 명확히하기 위해 답변을 편집했습니다.
Klox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.