使用LibTar解压缩文件

时间:2013-06-24 02:49:37

标签: c++ c extract tar

当我尝试使用Libtar提取文件时,我遇到了一些问题。

这是我的代码:

 int htlp_decompress_decompress(char * filename) {

    TAR * tar_file;
    char rootdir[200];
    strcpy(rootdir, "/var/cache/htpackage/");

    if (tar_open(&tar_file, filename, NULL, O_RDONLY, 0, TAR_GNU) == -1) {
        fprintf(stderr, "tar_open(): %s\n", strerror(errno));
        return -1;
    }

    if (tar_extract_all(tar_file, rootdir) != 0) {
        fprintf(stderr, "tar_extract_all(): %s\n", strerror(errno));
        return -1;
    }

    if (tar_close(tar_file) != 0) {
        fprintf(stderr, "tar_close(): %s\n", strerror(errno));
        return -1;
    }

    return 0;
}

问题是我在tar_extract_all()函数中收到错误“Invalid Argument”。但我不知道是什么导致了这个错误。

有谁知道发生了什么事?

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

根据man-page,函数声明为:

int tar_open(TAR **t, char *pathname, tartype_t *type, int oflags, int mode, int options);

这意味着您将O_RDONLY作为tartype_t *type参数传递。这是不正确的。也许你的意思是:

tar_open(&tar_file, filename, NULL, O_RDONLY, 0, TAR_GNU)