2009-04-16 4 views
7

매우 큰 텍스트 파일을 읽고 쓰는 프로그램이 있습니다. 그러나이 파일의 형식 (이진 데이터가 있어야하는 ASCII 표현)으로 인해 이러한 파일은 실제로 매우 쉽게 압축됩니다. 예를 들어,이 파일 중 일부는 10GB를 초과하지만 gzip은 95 % 압축을 제공합니다.프로그램에서 파일을 쓰거나 읽는 동안 파일을 투명하게 압축/압축 해제하는 방법은 무엇입니까?

프로그램을 수정할 수 없지만 디스크 공간이 소중하기 때문에이 파일을 투명하게 압축 및 압축 해제하는 동안이 파일을 읽고 쓸 수있는 방법을 설정해야합니다.

프로그램은 파일을 읽고 쓸 수만 있습니다. 이해한다면 입력과 출력 모두에 대해 명명 된 파이프를 설정해야합니다. 어떤 사람들은 압축 된 파일 시스템을 제안하고있다. 어느 쪽을 만들까요?

기술 정보 : 저는 현대 Linux를 사용하고 있습니다. 이 프로그램은 별도의 입력 및 출력 파일을 읽습니다. 입력 파일을 순서대로 읽지 만, 두 번 사용합니다. 출력 파일을 순서대로 기록합니다.

+0

내 태그를 자유롭게 편집 할 수 있습니다. 나는 적절한 것을 선택하는 것이 매우 어렵다는 것을 알았다. 또한, 이것이 항상 중복되는 경우 알려 주시면 삭제 해 드리겠습니다. –

+1

프로그램을 변경할 수 없으므로 이것은 프로그래밍과 관련이 없습니다. 더 큰 디스크 나 r/w 압축 파일 시스템이 필요합니다. – Alnitak

답변

5

zlibc : http://zlibc.linux.lu/을 확인하십시오. 또한

, FUSE가 옵션 인 경우 (즉, 커널이 너무 나이가 아니다), 고려는 :

+0

zlibc로도 쓸 수 있습니까? 내가 읽을 수있는 것은 매우 중요합니다. –

+0

zlibc는 주로 압축하는 새 프로그램을 작성하기위한 도구이며 프로그램을 만질 수는 없다고 말했습니다. 나는 compuFUSEd에 대한 언급을 위해 이것을 표결했다. 그것은 당신의 문제에 잘 맞는 것처럼 들린다. – unwind

+0

zlibc는 읽기 전용이지만 LD_PRELOAD 메커니즘을 통해 다시 컴파일하지 않고도 확실히 사용할 수 있습니다. – EFraim

2

명명 된 파이프는 전이중 작업을 제공하지 않으므로 하나의 파일 이름 만 제공해야하는 경우 좀 더 복잡해집니다.

응용 프로그램에서 파일을 검색해야하는지 알고 있습니까?

응용 프로그램이 stdin, stdout에서 작동합니까?

은 아마 솔루션 파일

별도의 입력 및 출력 파일을 사용하면 다음과 같은 작업을 수행 할 수 있습니다 때문에 만 디렉토리를 포함하는 미니 압축 된 파일 시스템을 만드는 것입니다 : 이제

mkfifo readfifo 
mkfifo writefifo 
zcat your inputfile > readfifo & 
gzip writefifo > youroutputfile & 

launch your program ! 

을, zcat이 입력 파일을 읽는 것을 끝내 자마자 yout 프로그램은 SIGPIPE 신호를 받게 될 것이므로

아마도 압축 된 파일 시스템을 사용하는 것이 적절할 것입니다. CompFUSE와 같이 탐색과 같은 지원되지 않는 작업에 대해 걱정할 필요가 없기 때문입니다.

+0

귀하의 질의를 처리하기 위해 제 질문을 편집했습니다. 프로그램이 stdin/out을 읽거나 쓰지 않습니다. –

0

사용하는 언어 http://www.biggerbytes.be/를 compFUSEd?

Java를 사용하는 경우 API 문서의 GZipInputStream 및 GZipOutputStream 클래스를 살펴보십시오.

C/C++를 사용하는 경우 zlibc을 사용하는 것이 가장 좋은 방법 일 수 있습니다.

+0

프로그램을 변경할 수 없으므로 프로그램 외부에서 작동해야합니다. 어떤 언어로도 멋지지만, 어떤 프로그래밍보다 리눅스에서 더 잘 작동한다고 생각했습니다. –

관련 문제