我需要创建一个目录的tarball,然后用C中的bz2进行压缩.有没有使用libtar和libbz2的体面教程?
解决方法
好的,我为你做了一个快速的例子.没有错误检查和各种任意决定,但它的工作. libbzip2具有相当的
good web documentation. libtar,而不是这么多,但是在包中有联机帮助页,一个例子和一个记录的头文件.以下可以使用g C TarBz2.cpp -ltar -lbz2 -o C TarBz2.exe构建:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <libtar.h> #include <bzlib.h> #include <unistd.h> int main() { TAR *pTar; char tarFilename[] = "file.tar"; char srcDir[] = "dirToZip/"; char extractTo[] = "."; tar_open(&pTar,tarFilename,NULL,O_WRONLY | O_CREAT,0644,TAR_GNU); tar_append_tree(pTar,srcDir,extractTo); close(tar_fd(pTar)); int tarFD = open(tarFilename,O_RDONLY); char tbz2Filename[] = "file.tar.bz2"; FILE *tbz2File = fopen(tbz2Filename,"wb"); int bzError; const int BLOCK_MULTIPLIER = 7; BZFILE *pBz = BZ2_bzWriteOpen(&bzError,tbz2File,BLOCK_MULTIPLIER,0); const int BUF_SIZE = 10000; char* buf = new char[BUF_SIZE]; ssize_t bytesRead; while((bytesRead = read(tarFD,buf,BUF_SIZE)) > 0) { BZ2_bzWrite(&bzError,pBz,bytesRead); } BZ2_bzWriteClose(&bzError,NULL); close(tarFD); remove(tarFilename); delete[] buf; }