나는 둘의 차이점을 이해하므로 그것에 대해 갈 필요가 없지만 Windows가 CR과 LF를 모두 사용하여 줄 바꿈을 나타내는 이유가 무엇인지 궁금합니다. Linux 방법 (LF 사용)이 훨씬 더 합리적이고 공간을 절약하며 구문 분석이 더 쉬운 것 같습니다.
나는 둘의 차이점을 이해하므로 그것에 대해 갈 필요가 없지만 Windows가 CR과 LF를 모두 사용하여 줄 바꿈을 나타내는 이유가 무엇인지 궁금합니다. Linux 방법 (LF 사용)이 훨씬 더 합리적이고 공간을 절약하며 구문 분석이 더 쉬운 것 같습니다.
답변:
역사적으로 사용할 때 도트 매트릭스 프린터 teletypes CR은 캐리지를 줄의 첫 번째 위치로 되돌리고 LF는 다음 줄로 공급합니다. 파일 자체에 CR + LF를 사용하면 어떤 종류의 프린터 드라이버 없이도 파일을 프린터로 직접 보낼 수 있습니다.
감사합니다 @zaph는 도트 매트릭스 프린터가 아닌 텔레타이프라고 지적했습니다.
@sshannin이 Raymond Chen의 블로그에서 URL을 게시했지만 더 이상 작동하지 않습니다. 블로그가 내부 소프트웨어를 변경했기 때문에 URL이 변경되었습니다.
새 블로그의 이전 게시물을 크롤링 한 후 여기 에서 찾았습니다 .
블로그에서 인용 :
라인 터미네이터가 CR + LF 인 이유는 무엇입니까?
이 프로토콜은 텔레 타이프라이터 시대로 거슬러 올라갑니다. CR은 "캐리지 리턴"을 의미합니다. CR 제어 문자는 용지를 전진하지 않고 0 열로 프린트 헤드 ( "캐리지")를 반환했습니다. LF는 "linefeed"를 의미합니다. LF 제어 문자는 프린트 헤드를 움직이지 않고 용지를 한 줄 앞으로 이동합니다. 따라서 프린트 헤드를 열 0으로 되돌리고 (다음 행을 인쇄 할 준비가 됨) 용지를 진행하려면 (새 용지에 인쇄되도록) CR과 LF가 모두 필요합니다.
RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) 또는 RFC 2616 (HTTP)과 같은 다양한 인터넷 프로토콜 문서로 이동하면 모두 CR + LF를 라인 종료 순서. 그래서 진짜 질문은 "왜 CP / M, MS-DOS, Win32는 라인 종결 자로 CR + LF를 사용합니까?"가 아닙니다. 오히려 "왜 다른 사람들이 이러한 표준 문서와 다른 라인 터미네이터를 사용하기로 선택 했습니까?"
Unix는 라인 종료 시퀀스로 일반 LF를 채택했습니다. stty 옵션을 살펴보면 onlcr 옵션이 LF를 CR + LF로 변경해야하는지 여부를 지정한다는 것을 알 수 있습니다. 이 설정이 잘못되면 계단 텍스트가 표시됩니다.
each line begins
이전 줄이 중단 된 곳. 따라서 유닉스에서도 원시 모드로두면 행을 종료하려면 CR + LF가 필요합니다. LF 이전의 암시 적 CR은 한 줄에 1 바이트를 절약하기 때문에 아마도 경제적 인 유닉스 발명품입니다.
C 언어의 유닉스 조상은이 규칙을 C 언어 표준으로 전달했습니다. C 언어 표준에는 "\ n"(LF 인코딩) 만 있으면 행을 종료하므로 원시 파일 데이터를 논리 행으로 변환하는 런타임 라이브러리의 부담이됩니다.
C 언어는 또한 "일반 줄 종결 자"의 개념을 표현하기 위해 "개행"이라는 용어를 도입했습니다. 아스키위원회가 1996 년경에 0x0A 문자의 이름을 "newline"으로 변경했다고 들었 기 때문에 혼란 수준이 더욱 높아졌습니다.
실제 페이지를 더 이상 사용할 수 없기 때문에이 두 번째 링크를 The Wayback Machine의 스냅 샷으로 변경했습니다.
귀하의 질문에 대한 답변이 되었기를 바랍니다.
그것은 옛날부터 텔레타이프 기계 (그리고 타자기)에서 나온 것입니다.
예전에는 줄을 다 입력했을 때 타자기의 마차 (종이를 잡고 입력 할 때 왼쪽으로 미끄러짐)를 줄의 시작 부분 (CR)으로 다시 이동해야했습니다. 그런 다음 다음 줄로 이동하려면 용지를 한 줄 아래로 (LF) 진행해야했습니다.
대시로 문자를 취소하려는 경우 (덮어 쓰기 만하면 됨)와 같이 캐리지 반환시 줄 바꿈을 원하지 않을 수 있습니다.
그러나 기본적으로 관습으로 귀결됩니다. DOS는 전체 CR / LF 규칙을 사용했고 UNIX는이를 약간 단축했습니다. 이제 우리는 붙어 있습니다!
데이터 전송 속도를 실제 인쇄 속도와 더 잘 일치시키기 위해 하나 대신 두 문자 (때로는 더 많이)를 보내는 이유가 두 개 이상의 계정을 보았습니다 ( 이는 오래 전이었습니다 ). 프린트 헤드 이동은 단일 문자를 인쇄하는 것보다 오래 걸렸으며 추가 문자를 보내는 것은 데이터 전송이 인쇄 장치보다 앞서는 것을 방지하는 방법이었습니다. 따라서 Windows에서 줄 끝 문자가 여러 개있는 이유는 기본적으로 QWERTY 키보드를 사용하는 이유와 동일 합니다 .
분명히이 방식이 Windows에서 오늘날까지 계속되는 이유는 지속적인 이전 버전과의 호환성과 궁극적으로는 단순한 관성에 근거한 것입니다.
그러나이 규칙은 Windows가 운영 체제 수준에서 엄격하게 적용하는 것은 아닙니다 . 모든 Windows 응용 프로그램은 호환되는 다른 응용 프로그램에 따라 규칙을 무시할 수 있습니다.
흥미롭게도 "Newline"에 대한 Wikipedia 기사에서는 Windows 8에서 LF 만 사용하는 변경 사항을 도입 할 수 있다고 주장합니다. 이 기사는 또한 Mac OS X에서 LF + CR에서 LF 로의 전환을 도입했다고 설명합니다.