Как использовать функции librsync для открытия удаленных файлов?
Я использую библиотеку librsync для поддержки версий файлов. Я не могу открыть файлы из сети.
Пример (создание файла подписи):
int main(int argc, char** argv)//FILE *original, FILE *signature)
{
if(argc != 2)
{
cout<<"Enter the original file name."<<endl;
exit(1);
}
FILE *fpa;
fpa = fopen(argv[1],"r");
if(fpa==NULL)
{
cout<<"ERROR"<<endl;
exit(1);
}
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;
}
Когда я запускаю программу с аргументом файла по сети, например
./a.out cs1130218@palasi.cse.iitd.ernet.in:games.txt
fpa равен NULL.
Я предполагаю, что fopen не предназначен для открытия файлов по сети. Мне нужна команда, которая может сделать это. Любая команда в c/ C++. Вы можете ясно видеть, что я хочу сделать с программой.
2 ответа
"Мне нужна команда, которая может открывать файлы по сети" - это действительно очень высокоуровневая операция, и поэтому она закрывает все детали: какой тип сетевого протокола следует использовать? Как обрабатывать аутентификацию? Как следует обрабатывать сетевые ошибки? Что нужно сделать после открытия файла: чтение / запись / оба, последовательное или случайное?
librsync относительно низкоуровневый и даже не пытается ответить на эти вопросы сам. Его README объясняет:
librsync не реализует протокол rsync. Если вы хотите поговорить с rsync-сервером для передачи файлов, вам нужно выложить в rsync. librsync предназначен для создания других программ, которые передают файлы так же эффективно, как и rsync. Вы можете использовать librsync для создания инструментов резервного копирования, распространения бинарных исправлений в программах или синхронизации каталогов с сервером или между партнерами.
Чтобы открыть файлы по сети, вам нужно реализовать свой собственный сервер и проводной протокол, или вы должны будете использовать такие команды, как rsync
которые обрабатывают эти детали для вас (и, если большая часть вашей логики заключается в обработке других команд, C++, возможно, не лучший инструмент для этой работы).
Ни librsync
ни fopen
иметь дело с удаленными файлами.
Взгляните на использование виртуальной библиотеки файловой системы, такой как GVFS или KIO: они могут открывать файлы через SFTP, а затем вы можете передавать их в librsync.