Как использовать функции 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.

Другие вопросы по тегам