![EOT와 EOF의 차이점](https://linux55.com/image/98822/EOT%EC%99%80%20EOF%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
나는 EOT가 ASCII 코드 4이고 EOF가 -1(적어도 C에서는)로 인코딩된다는 것을 알고 있습니다. 나는 EOF가 -1에 매핑된다는 사실을 발견하기 전까지 EOT의 동의어라고 생각했습니다. EOF가 EOT 대신 -1로 매핑되는 이유는 무엇입니까? 내가 아는 한, 그들은 모두 파일 스트림을 종료하는 동일한 작업을 수행합니다. 내가 볼 수 있는 유일한 차이점은 EOT가 bash 쉘에서도 명령을 종료한다는 것입니다. 저는 이 두 코드의 정확한 기술적 차이점을 설명하고 싶습니다.
답변1
일반적으로 EOF는 문자가 아닙니다. 누락된 문자입니다.
프로그램이 기본 설정을 사용하여 표준 모드(즉, stdio만 사용하는 순수 C 프로그램)의 터미널에서 실행되는 경우 ASCII 문자 EOT가 표시되지 않습니다. 터미널 드라이버는 이 문자를 인식하고 EOF 조건(낮은 수준에서 0 반환 값 read()
)을 생성합니다. stdio 라이브러리는 이 EOF 조건을 관련 함수( EOF
for 의 매크로 getchar()
, null 포인터 fgets()
등) 에 적합한 반환 값으로 변환합니다.
매크로의 숫자 값은 C 라이브러리를 제외한 EOF
어느 곳에서도 관련이 없으며 EOF 조건의 의미를 이해하는 데 영향을 주어서는 안 됩니다.
답변2
EOF
C의 맥락에서는 파일에 나타날 수 없는 것입니다. EOT
메시지의 끝을 나타내는 데 사용되는 ASCII 문자이며 스트림의 끝을 나타내는 UNIX 터미널의 특수 문자입니다.사용자 입력에만 나타나는 경우), 그러나 파일에 나타날 수 있으므로 C에서 파일 끝을 나타내기 위해 이를 사용하는 것은 바이너리 파일을 읽을 때 좋지 않은 생각입니다!
답변3
EOT는 직렬 장치에서 사용되는 많은 제어 문자 중 하나입니다. 직렬 회선을 통해 데이터를 전송하거나 종이 테이프와 같은 직렬 소스에 파일을 저장하는 것과 관련된 다른 많은 제어 문자가 있습니다. 여기에는 SOH, STX, ETX, FS, RS, GS 및 US와 같은 문자가 포함됩니다. 전송 제어 및 오류 수정을 위해 추가 제어 문자가 사용됩니다.
직렬 연결에서 EOT(전송 종료) 문자는 전송 종료를 나타냅니다. 직렬 연결은 일반적으로 파일 드라이버를 사용하여 액세스됩니다. 직렬 전송이 끝나면 파일 드라이버는 이를 EOF(파일 끝) 조건으로 보고합니다.
EOF는 문자가 아닙니다. getchar()는 정수를 반환합니다. 0~255 범위의 값을 갖는 동안 유효한 문자입니다. 값 -1은 일반적으로 Unix/Linux에서 false/invalid/fail 표시기로 사용됩니다. (실제로는 실패 이유가 많기 때문에 0이 아닌 값이지만 일반적으로 성공 사례는 한 번뿐입니다.) getchar()가 -1을 반환하면 분명히 문자가 반환되지 않습니다. 그러나 출력을 바이트 단위로 저장하면 EOF와 DEL(삭제) 문자를 구분할 수 없습니다.