Segmentierungsfehler – bei Verwendung der Librsync-Bibliothek
-
21-12-2019 - |
Frage
Ich habe zwei Basisdateien filea.txt
Und fileb.txt
.Ich versuche, eine Signatur zu erstellen, dann ein Delta mithilfe der Signatur und fileb.txt
, dann patchen filea.txt
mit diesem Delta.Der Inhalt der resultierenden Datei sollte derselbe sein wie fileb.txt
Im ersten Teil wird eine Signaturdatei erstellt 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;
}
Dann soll der zweite diese Signatur verwenden fileb.txt
Datei zum Erstellen einer Deltadatei
#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;
}
Ich kompile beide wie diesen GCC -o Delta create_delta.c -wall -g -lrsync
Aber der zweite Teil gibt einen Segmentierungsfehlerfehler aus.
Vielleicht erzeugt die dritte ausführbare Datei aus diesem Grund eine leere Datei:
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;
}
AKTUALISIERENIch habe versucht, Dateizeiger auf Null zu überprüfen, nachdem fopen keine Fehler festgestellt hat.
Lösung
Nach dem Anschauen https://rproxy.samba.org/doxygen/librsync/rsync_h.html Ich dachte, du musst es verwenden
rs_build_hash_table(signatur)
bevor Sie anrufen
rs_delta_file(signature, fpb, fpd, NULL);
Funktioniert dann gut für mich.