Development/Common

엔터의 의미, CR LF

linuxism 2012. 2. 18. 09:12


개행 LF : Line Feed(ASCII 10)

복귀 CR : Carriage Return(ASCII 13)

 

간단하게 타자기를 생각을 하면 한 글자씩 입력하면 먼지 옆으로 한 칸씩 밀려 나고

한 줄을 다 입력하고 나서는 그걸 왼쪽으로 밀어 주고 또 입력을 하는 것을 영화에서 봤을 것이다.

 

간단하게 한 줄에서 왼쪽 끝으로 밀어주는 것이 CR이고

다음 줄에 입력을 하도록 종이를 한 줄 밀어주는 것이 LF 라고 할 수 있다.

 

어떤 연유에서 처리방법들이 그렇게 달라진지는 모르겠지만

 

DOS/Windows 계열에서는 엔터를 CR+LF(\r\n) 으로 처리하고

Unix/Linux 계열에서는 엔터를 LF(\n)으로 처리하고

MAC 계열에서는 엔터를 CR(\r)로 처리한다고 한다 <- 요건 접해보질 않아서..

 

* \rreturn \nnewline를 의미한다.

 

굳이 DOS/Windows 상황에서 \r\n의 차이점을 느끼려면 파일을 읽을 때 binary모드로 읽으면 파일에 엔터가 \r\n으로 표기 되지만 ASCII 모드로 읽으면 \n 으로만 표기가 되는 것을 알 수 있다.

 

그래서 옛날에 캐리지 리턴과 라인 피드를 쓰면 보통 우리가 '엔터'키를 누른 듯한 효과를 냅니다


windows
는 개행을 케리지 리턴(cr)과 라인 피드(lf)이 두 개의 문자를 개행코드로 하고, 유닉스는 라인 피드를 개행코드로 하며,  멕킨토시는 케리지 리턴을 개행코드로 합니다.

 

[출처 : http://blog.naver.com/ys9922?Redirect=Log&logNo=90025503930]







새줄 문자(newline)는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 개행 문자줄바꿈 문자(line break), EOL(end-of-line)과 같은 뜻이다. 기종이나 운영 체제에 따라 새줄 문자를 나타내는 코드가 다를 수도 있다. 그래서 텍스트를 다른 시스템으로 전송할 때 새줄 문자의 치환 작업도 필요하다.

새줄 문자가 마지막 줄 끝에도 들어가는지 여부가 헷갈릴 수 있다. 대부분의 시스템이 관습적으로 마지막 줄 끝에도 새줄 문자를 넣는다. 프로그램 중에는 마지막 줄 끝에 새줄 문자가 없으면 오류가 발생하는 것도 있다.

자동 줄 바꿈 기능이 있는 소프트웨어는 주로 문단 사이 또는 수직 목록 사이에서 새줄 문자를 사용한다. 새줄 문자를 사용하는 방식으로 하드 리턴과 소프트 리턴이 있다.

역사[편집]

ISO와 ASA(ANSI의 전신)는 동시에 ASCII를 개발했다. 1963년부터 1968년까지 ISO 초안은 CR+LF와 LF를 새줄 문자로 정했다. ASA의 초안은 CR+LF만 지원했다. CR+LF는 텔레타이프, ASR33을 콘솔 장치로 사용한 초기 컴퓨터 시스템에서 널리 쓰였다.

텔레타이프의 프린터가 다음 줄의 처음부터 인쇄하기 위해서는 두 글자를 인쇄하는 시간이 필요했다. 텔레타이프는 텍스트의 한 글자를 같은 시간 간격으로만 프린터로 전송할 수 있었다. 프린터에서 좌우로 움직이는 장치가 캐리지(carriage)였는데 이것이 오른쪽 끝에서 왼쪽 끝으로 이동하는 시간이 두 글자 인쇄하는 만큼 걸렸다. 새줄 문자로 코드 하나만 쓸 경우 다른 한 글자를 인쇄할 수 없었다. 그래서 텔레타이프를 쓰던 시절에는 CR+LF 두 코드를 새줄 문자로 썼다. 캐리지 리턴이 먼저 전송되었다. 그리고 종이를 한 줄 옮기는 라인 피드가 이어서 전송되었다. 좌우 여백이 줄어들면 캐리지가 이동하는 시간이 더 필요하므로 CR이나 NUL을 더 채워 넣어야 할 때도 있었다.

컴퓨터가 막 탄생하던 시절에는 디스크와 메모리가 비쌌기 때문에 1964년에 나온 운영 체제 멀틱스는 새줄 문자를 LF 하나로 통일했다. 유닉스도 멀틱스의 새줄 문자 관례를 이어받았고 리눅스도 이 방식을 쓰고 있다.

1981년에 등장한 MS-DOS는 CP/M의 CR+LF 방식을 따랐다. CP/M은 시리얼 라인으로 터미널을 연결했기 때문에 화면 전환 속도가 느렸다. 느린 터미널에서 줄바꿈이 있을 때 스크롤 하는 시간과 보조를 맞추기 위해 CR+LF 방식을 쓰는 것이 자연스러웠다. 윈도도 이 관례를 따르고 있다.

표현[편집]

줄바꿈을 표현하는 방법은 시스템과 운영 체제에 따라 여러 가지가 있다. 윈도는 ASCII의 CR+LF로 새줄을 나타내고 유닉스는 LF로 새줄을 나타낸다. 맥 OS은 새줄 문자로 버전 9까지 CR을 썼지만 버전 10부터 LF를 쓰고 있다. 새줄 문자로 이밖의 다른 코드를 사용하는 시스템도 있다. 특정 코드를 사용하지 않고 레코드 하나에 한 줄씩 저장하거나 줄의 길이를 고정시켜서 줄바꿈을 표현하는 시스템도 있다.

ASCII[편집]

ASCII 시스템에서는 새줄 문자로 라인 피드(line feed, LF, '\n', 0x0A), 캐리지 리턴(carriage return, CR, '\r', 0x0D)이 주로 사용된다. 라인 피드는 프린터에서 종이가 한 줄씩 인쇄되며 나오는 것을 뜻한다. 캐리지 리턴은 프린터에서 실제 인쇄를 수행하는 장치가 한 줄의 끝에서 시작 위치로 돌아가는 것을 뜻한다. 새줄 문자로 드물게 RS(record separator, 0x1E)를 쓰는 시스템도 있었다.

ASCII의 새줄 문자
LF멀틱스유닉스리눅스제닉스AIXOS XFreeBSD
CR+LFDEC TOPS-10RT-11CP/MMP/M도스OS/2윈도심비안 OS팜 OS
CR콤모도어 8비트 머신TRS-80애플 II맥 OS (버전 9 이하), OS-9
RSPOSIX 이전의 QNX

HTTPSMTPFTPIRC 등 인터넷 프로토콜 대부분은 ASCII의 CR+LF를 새줄 문자로 사용하도록 규정하고 있다. 그러나 홀로 쓰인 LF도 지원하도록 권장하고 있다.

유니코드[편집]

유니코드 표준은 여러 글자를 줄바꿈 문자로 정의했다. 유니코드를 지원하는 프로그램은 이것들을 한 줄의 끝으로 인식해야 한다.

유니코드의 새줄 문자
LF라인 피드(Line Feed), U+000A
FF폼 피드(Form Feed), U+000C
CR캐리지 리턴(Carriage Return), U+000D
CR+LF연속된 CR과 LF
NEL다음 줄(Next Line), U+0085
LS줄 구분자(Line Separator), U+2028
PS문단 구분자(Paragraph Separator), U+2029

EBCDIC[편집]

IBM 메인프레임, z/OS(OS/390), i5/OS(OS/400) 등 EBCDIC 시스템은 새줄 문자로 NEL(next line, 0x15)을 사용한다. EBCDIC에도 CR, LF로 불리는 글자가 있지만 ASCII의 것과 코드가 다르다. EBCDIC 시스템 중에는 NEL 코드가 다른 것도 있어서 주의해야 한다.

기타 코드[편집]

CDC 6000 시리즈의 운영 체제는 60비트짜리 단어 끝 부분에 6비트짜리 글자 2개 이상이 0으로 채워진 상태를 새줄 문자로 정의했다. 채우는 문자로 0 대신 콜론이 되도록 설정을 바꿀 수 있었다. 싱클레어 리서치의 가정용 컴퓨터, ZX80, ZX81은 새줄 문자 코드가 0x76이었다.

레코드 방식[편집]

옛날의 메인프레임 운영 체제는 텍스트 한 줄마다 레코드에 저장하는 방식이었다. 레코드의 시작 부분에 캐리지 제어 문자를 둬서 줄바꿈 여부, 캐리지 리턴 여부를 조절할 수 있게 했다.

몇몇 메인프레임 운영 체제는 고정된 줄 길이로 한 줄을 저장했다. 그 길이는 주로 80자였다. 외부에서 텍스트 파일을 받았을 때 한 줄이 80자보다 짧으면 공백 문자로 채워야 했고 한 줄이 너무 길면 잘려나갔다. 이것은 천공 카드의 방식을 흉내낸 것이다. 천공 카드 한 장마다 한 줄씩 기록했고 이 길이가 80자였다.

OpenVMS도 레코드 기반 파일 시스템을 사용한다. 텍스트 파일을 저장할 때 레코드마다 한 줄씩 저장한다. 대부분 파일 형식이 줄 구분 문자를 사용하지 않지만 레코드 관리 서비스가 투명한 새줄 문자를 삽입할 수 있다.

같이 보기[편집]


출처 - http://ko.wikipedia.org/wiki/%EC%83%88%EC%A4%84_%EB%AC%B8%EC%9E%90