gpt4 book ai didi

c - 段错误 - 使用 librsync 库时

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:32 24 4
gpt4 key购买 nike

我有两个基本文件 filea.txtfileb.txt。尝试创建签名,然后使用签名和 fileb.txt 进行增量,然后使用该增量修补 filea.txt。生成的文件内容应与 fileb.txt

相同

第一部分从 filea.txt 创建签名文件:

#include <stdlib.h>
#include <stdio.h>
#include "librsync.h"

int main(){
FILE *fpa;
fpa = fopen("filea.txt","r");

FILE *fps;
fps = fopen("sig.sig","w+");


rs_result res = rs_sig_file(fpa, fps, 1,2,NULL);

fclose(fpa);
fclose(fps);

printf("Result code: %d\n", res);

return 0;
}

然后第二个应该使用该签名和 fileb.txt 文件来创建增量文件

#include <stdlib.h>
#include <stdio.h>
#include "librsync.h"


int main(){
FILE *fpb;
fpb = fopen("fileb.txt", "r");

FILE *fpd;
fpd = fopen("delta.delt","w+");

FILE *sigFile;
sigFile = fopen("sig.sig","r");

rs_signature_t *signature;

rs_loadsig_file(sigFile, &signature, NULL);

rs_result res = rs_delta_file(signature, fpb, fpd, NULL);

printf("Result: %d", res);

fclose(fpb); fclose(fpd); fclose(sigFile);

return 0;
}

我正在这样编译它们gcc -o delta create_delta.c -Wall -g -lrsync

但是第二部分给出了Segmentation fault error。

可能正因为如此,第三个可执行文件产生空文件:

int main() {
FILE *fpd;
fpd = fopen("delta.delt", "r");

FILE *fpa;
fpa = fopen("filea.txt", "r");

FILE *fpn;
fpn = fopen("file_new.txt", "w+");

rs_patch_file(fpa, fpd, fpn, NULL);

fclose(fpd); fclose(fpa); fclose(fpn);

return 0;
}

更新在 fopen 未发现任何错误后尝试检查文件指针是否为空。

最佳答案

看了https://rproxy.samba.org/doxygen/librsync/rsync_h.html之后我想你必须使用

rs_build_hash_table(signature)

调用之前

rs_delta_file(signature, fpb, fpd, NULL);

那对我来说很好。

关于c - 段错误 - 使用 librsync 库时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com