데이터가 디스크에 저장되어 너무 커서 메인 메모리에 저장할 수 없습니다. 스트리밍 문자 변환은 어떻게 수행합니까?
나는이 같은 iconv
를 통해 데이터 처리 파이프 라인으로 디스크에서 데이터를 스트리밍 할
zcat myfile | iconv -f L1 -t UTF-8 | # rest of the pipeline goes here
를 불행하게도, 나는 전체 파일을 메모리에 버퍼의 iconv보고 있어요 데이터. 즉, 메모리 풋 프린트가 최소 인 파이프 라인에서 블로킹 동작에 대한 모든 주 메모리를 사용하고 있음을 의미합니다.
stdbuf -o 0 iconv -f L1 -t UTF-8
를하지만의 iconv는 내부적으로 자체 버퍼링을 관리하는 것 같습니다 - 그것은 리눅스 파이프 버퍼와는 아무 상관 없습니다 :
나는 이런 식으로의 iconv 호출 시도했습니다.
이 글은 아치 리눅스에서 gblic 2.6과 2.7로 패키징 된 바이너리로 보입니다. 데비안에서는 glibc 2.5로 그것을 설명했습니다.
이 문제를 해결할 방법이 있습니까? 스트리밍 문자 변환은 간단하지 않지만, 일반적으로 사용되는 유닉스 도구가 스트림에서 작동 할 것이라고 생각했습니다. 주 메모리에 맞지 않는 파일을 다루는 일은 드뭅니다. libiconv
에 연결된 내 바이너리를 굴려야합니까?
이 질문을 유닉스 스택 교환에 넣어야합니까? 어쨌든 해결책은'recode' 명령 (gnu.org/software/recode)을 사용하는 것이 었습니다. – Cera