2011-08-11 2 views
1

시스템()에 대한 대안을 (Waiting for unzip to finish before carrying on C++ code on a RedHat machine에 설명 된대로)는 C++ 프로그램레드햇에 C++에서 파일을 압축 풀기 : 나는 파일을 압축 해제 할 필요가

나는 현재 같은 것을 할이 작업을 수행하려면 실행하는 동안 :

system("unzip /usr/bin/File/ZippedFile.gz -d /usr/bin/File/) 

"/usr/bin/File/ZippedFile.gz"를 "/ usr/bin/File/ZippedFile"에 문제없이 압축을 해제합니다.

잘 작동합니다. 그러나 나는 많은 사람들이 사용하는 것을 말하는 것 같다.

system() 

은 금기 사항이다.

사람들은 보안 및 시스템 리소스 (여기에 설명 된 것처럼 : http://www.cplusplus.com/forum/articles/11153/)로 인해 그것을 좋아하지 않는 것처럼 보입니다.

그러나 압축 해제가 완료 될 때까지 프로그램을 기다리려면 실용적인 대안이 있습니까?

답변

4

일반 zlib 또는 boost::iostreamgzip facility을 사용할 수 있습니다.

시스템 자체 잘못 아니지만, 당신은 또한 fork, exec, waitmkstemp와 쉘을 사용하지 않는 그것의 대체를 작성할 수 있습니다. 그러나 이것은 성가시다. boost::gzip_decompressor을 사용하면 단일 파일의 압축을 풀 때 가장 좋은 C++ 옵션입니다. 디렉토리를 압축 해제해야하는 경우 포크와 친구가 더 좋습니다. mkstemp에 대해 읽으십시오. 종료 자녀 wait를 사용하는 예를 들어 http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

: 포크와 간부 가족에 충돌 과정에 대한

http://www.gnu.org/s/hello/manual/libc/Temporary-Files.html

: 임시 디렉토리를 만드는 방법에 대한 참고로 http://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/wait.htm

0

그래, 여러 가지 이유로 (보안, 휴대 성 등) 나쁜 관행입니다. 당신은 지퍼 라이브러리 (Google 검색이 내게 http://www.firstobject.com/easy-zlib-c++-xml-compression.htm 같은 것을 줘야합니다. 또는 무료 인 경우 '압축을 풉니 다'를 빌드하는 데 사용되는 라이브러리도 있지만로드가 있어야 함)를 사용하고이를 사용하고 둘 다 병렬로 수행해야하는 경우 다음 스레드를 소개합니다. 약간의 작업은 동의하지만, 실제로는 system() 호출을 사용하는 것보다 좋습니다.