캐리지 리턴(CR)과 라인피드(LF)

    리눅스를 공부하다 read를 이용해 키 입력을 받던 중, 문득 캐리지 리턴(CR)과 라인피드(LF)에 대해 궁금해졌다.

    컴퓨터구조에서 문자코드를 처음 봤을 때도, 궁금했던 부분이었는데 어찌저찌 넘어가게 돼서 이제와 정리해보려 한다.

     

    엔터키를 구성하는 요소

    캐리지 리턴과 라인피드는 두개가 하나의 엔터키를 구성한다. 캐리지 리턴은 13, 라인피드는 10. 각각 유니코드로 나타내는 번호로, 13과 10이 모두 입력돼야 비로소 우리가 아는 엔터가 작동되는 것이다. 이 둘은 개행문자로, 각각  \r과 \n으로 나타낼 수 있다. 

     

    캐리지 리턴과 라인피드의 의미

    사실 이 둘의 개념은 구식 타자기에서 가져온 것이다. 옛날 타자기를 생각해보자. 한자 한자 써내려가고 종이의 끝에 도달하면, 팅! 요란한 소리와 함께 다시 종이를 원점으로 되돌린다. 그리곤 다음 문단은 작성하기 위해 종이를 한칸 올려준다.

    캐리지 리턴과 라인피드는 여기에서 왔다. 타자기에서 종이를 원점으로 되돌리는 것은 캐리지 리턴, 다음 문장으로 넘기는 것이 바로 라인피드의 역할이다. 흥미롭다. 현재의 키보드가 구식 타자기의 영향을 받은 것은 지극히 당연한 일이겠지만. 나는 이 사실을 처음 알았을 때, 왠지 모르게 매우 귀엽다고 생각했다.

     

    운영체제에 따라 엔터키가 다르다고?

    위 두 단락에서 설명한 내용은 사실 윈도우 운영체제 계열에서의 이야기다. 주저리 주저리 잘 떠들어 놓고 이게 무슨 소리냐 하면, 사실 타자기의 전통적인 방법인 캐리지 리턴과 라인피드를 윈도우에서는 계승해왔지만, 유닉스/리눅스 계열의 운영체제에서는 그대로 계승하지 않았다. 디지털 시대로 넘어오면서, 개행의 표시는 라인피드, \n만으로도 충분하게 되었다. 이에 따라 유닉스 계열에서는 자연스럽게 캐리지 리턴을 사용하지 않게 된 것이다. 그 밖에 맥에서는 라인피드 대신 캐리지 리턴을 채택했고 따라서 \r을 줄바꿈 문자로 사용하게 되었다곤 하는데.. 본인은 맥을 사용해 본 적이 없어서 이에 따른 문제에 대한 공감은 못 하겠다.

     

    정리

    유닉스/리눅스 계열은 줄바꿈 문자로 라인피드, \n, 0x0a 를 사용한다.

    윈도우 계열은 줄바꿈 문자로 캐리지 리턴과 라인피드 둘을 조합하여 사용한다.  \r\n 또는 0x0d 0x0a 

    맥은 줄바꿈 문자로 캐리지 리턴을 사용한다 \r 또는 0x0d

     

    캐리지 리턴과 라인피드 의미는 각각

    캐리지 리턴(CR) : 커서를 현재 행의 맨 앞으로 이동시킨다.

    라인피드(LF) : 커서를 다음 행으로 이동시킨다.

    댓글