linux에서 gzipped (또는 bzip) stream을 지원하는 방법은요 ?
2011.12.07 05:03
옛날에 만들어놓은 툴이 하나 있는데요.. 바이너리 파일을 열어서 주왁 스캔해서 뭔가 만드는 툴인데 (한번 주왁 스캔하면 땡입니다), 이 파일이 압축되어있으면 지금은 압축을 풀어서 봐야 하거든요.
소스를 조금만 고쳐서 gzip이나 bzip2 된 넘을 그대로 지원할 수 있나 궁금해서요. less 같은 명령어는 압축된 넘을 그냥 풀어서 보여주더라구요. (이넘 경우엔 압축된 넘을 안 풀고 보는 방법이 없나 궁금하기까지)
가장 간단한 방법은.. system()을 가지고 /tmp에다 풀어놓고 보면 되긴 하는데.. 이게 한번 주왁 스캔하면 땡인 파일이라 저러기엔 억울하고. filter처럼 만들어두었으면 script로 풀어서 pipe로 넣으면 되는데.. fopen으로 만들어두어서요.. 그리고 스캔한 다음에 stdin으로 명령받는 interactive mode가 있어서 갑갑하네요.
프로그래밍이 업이 아니라서.. 사소해보이는 문제에 막혀있습니다. -_-;
또 한가지 가능한 방법은 gzip 이나 bzip2 소스를 구해서 밀어넣는건데.. 좀 linux답지 않아서 있는 명령을 그냥 쓸 수 없을까 해서요. fdopen(); fork(); pipe(); exec() 뭐 이런 걸로 어떻게 할 수 있지 않을까.. 쑤시고 있습니다.
코멘트 8
-
영진
12.07 08:02
추천:1 댓글의 댓글
-
왕초보
12.07 08:21
고맙습니다. 일단은 tmp에 풀고 지우고 할텐데요.. 프로그래밍이 취미인지라.. ( ..) 배우고 싶어서요.
-
파인애플통조림
12.07 10:51
왕초보님이 질문올리신거 처음본거 같아요
항상 답변을 해주시는 분으로 기억하는데..
-
질문은 가끔하시는데 외계어로 하시는지라...
-
구현이 어렵지는 않을텐데 메모리 관리나 그런게 물리게 되면 많이 귀찮을것 같습니다. 일단 스캔하시려는 압축 파일에 들어있는 내용을 어떤 방법이든 (아마 메모리 잡아서 해야겠지요?) 부분적으로 풀어야 할텐데요..
그냥 임시 폴더 잡아서 리스트만 만들어 풀고 다음에 원하는 파일만 풀면 안될까요?
이걸 메모리에서 하려면 파일 크기, 갯수에 대한 고려를 다 해야 할겁니다.
적고보니 답은 아니네요.. 그냥 의견입니다..
-
anti-virus solution 만들던 동료한테 글 보여주면서 물어보니깐..
한마디로 후자로 짚어버리네요.. ㅎㅎㅎ
-
왕초보
12.08 04:44
관심 가져주셔서 고맙습니다. 급한 것은 아니라서 그냥 계속 쑤셔보겠습니다. ^^ tar ball 처럼 많은 파일을 다루는게 아니고 압축이 되어있더라도 파일 한개 입니다. 그래서 지금 fopen-fread-fclose 구조로 되어있는데요. 이 구조를 거의 안 바꾸고 쓸 방법을 찾고 있습니다. 그래서.. 혹시 fork해서 child를 하나 만들고, pipe로 연결을 한다음 (이러면 file descriptor가 두개 생기는데 이걸 어떻게든 연결하고), exec를 가지고 압축푸는 프로그램을 수행하면.. 기존 구조는 거의 손을 대지 않고 지원이 가능해 보이긴 하거든요.
문제는 저런 짓을 한번도 해본 적이 없는지라.. 예제를 찾고 있는데 못 찾겠네요. -_-;; 저렇게 하면 버퍼니 메모리니 하는 것들을 OS가 알아서 해결하는 것이고, 저는 한번만 스캔하면 땡인지라 실행 자체도 빨라질 것이거든요. 풀면서 바로 스캔이 가능하니까요.
-
꼬소
12.08 06:46
차라리 스크립트를 하나 만드시는게 나을 듯 합니다.
대부분 언어에서 zip library가 있으니 이용하시면 될텐데요. 하지만 이미 만들어놓은 거면 말씀대로 스크립트로 tmp에 풀어놓고 지우며 사용하는게 편할거라 봅니다. 프로그램은 안할 수 있으면 안하는게...