파일에 다음과 같이 값이 들어 있다고 할때
##########################
1
2
3
\
'
##########################
위 파일을 정렬을 했더니
##########################
\
'
1
2
3
##########################
처럼 되었다. code 값을 찍어보니 \는 ascii table에서 97이거 '는 39이다.
backslash는 라인이 끝나지 않았음을 표시하기도 하는데
지금은 딱 그상황이다.
\를 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\로 바꿔도 정렬순서는 변하지 않는다.
C로 코딩한 프로그램에서는 \를 하나의 문자로 읽어 비교를 하게 돼 파일이 정렬돼 있다는 가정이 틀리게 된다.
이를 회피하는 방법을 sort 명령에서 찾으려 했으나 실패하고
man sort의 마지막 설명
*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.
을 보면 LC_ALL=C로 설정하고 정렬을 했더니
##########################
'
1
2
3
\
##########################
참 ...아직도 모르는게 너무 많구나..
LC_ALL=C로 모든 locale을 바꿀수도 있지만
LC_COLLATE=C만 해줘도 동일한 결과를 얻을수 있다.
LC_COLLATE를 설정해주면 strcmp와 동일한 결과를 얻을수 있다.
'C언어' 카테고리의 다른 글
large file or large memory (0) | 2014.11.24 |
---|---|
mmap 삽질 (0) | 2014.11.14 |
const 포인터( pointer ) (0) | 2014.06.25 |
suggest parentheses around assignment used as truth value (0) | 2014.06.11 |
valgrind test (0) | 2014.06.03 |