*인터넷 뒤지며 얻은 정보를 개인 적으로 종합, 정리 하였음.
- 라인 피드 (LF : Line Feed, 0x0a) : 캐럿을 다음 줄(현재 위치에서 바로 아래)로 이동 시킨다.
- 캐리지 리턴 (CR : Carriage Return ) : 캐럿을 줄의 맨 앞으로 이동 시킨다.
즉 모두 '줄 바꿈'과 관련이 있는 문자다.
줄 바꿈에 대한 정의는 시스템(OS), 언어 마다 다르다.
- 유닉스/리눅스 : LF만으로 줄 바꿈을 정의 한다.
- 윈도우/DOS : CRLF 조합으로 줄 바꿈을 정의 한다.
- C언어 : 유닉스 태생으로 LF만으로 줄 바꿈을 정의 한다.
위와 같이 유닉스/리눅스 시스템과 윈도우/DOS 시스템의 줄 바꿈에 대한 정의에 차이가 있다.
프린터나 타자기?와 같은 장비에선 LF로 캐럿의 위치를 현재 위치에서 바로 아래로 이동 하며 CR을 통해 줄의 맨 앞으로
이동 시키는 CR/LF (LF/CR과 다르다)의 조합을 통해서 줄 바꿈이 이루어 지는데
윈도우와 DOS는 이를 그대로 따라 가고 있다.(시스템 입장에서 보면 불편 한듯?)
따라서 윈도우의 파일을 그대로 리눅스로 옮기면 문자열 맨 끝에 '\r\n'이 붙게 되며
이를 리눅스 프로그램에서 그대로 사용시 문제가 발생할 소지가 있다.
윈도우와 DOS의 경우 C의 줄바꿈에 대한 정의와 차이가 있다.
즉 윈도우와 DOS에서 작성된 C프로그램이 줄바꿈을 '\n'으로 입력하면 하거나 읽어들이면
실제 파일에 '\r\n'으로 기록 되거나 읽히게 된다.
이러한 차이를 없애기 위해 fopen 함수 호출시 두번째 인자로 'b'(바이너리 모드)를 주지 않게 되면 C 라이브러리에서
'\n'을 '\r\n'으로 인식 하게 된다. 그러나 이 경우 두개의 '\r\n' 문자를 하나의 '\n' 문자로 인식 하기 때문에
파일 크기를 다루는 상황 등에서 문제가 발생할 수 있다.
'개발 이야기 > 이론및개념' 카테고리의 다른 글
(정리중)바이너리 데이터, 텍스트 데이터, 스트림, 인코딩 (0) | 2016.08.07 |
---|---|
2진수 컴퓨터 체계에서의 소수 표현 한계. (0) | 2014.12.17 |