如何使用librsync函数打开远程文件?

时间:2015-02-25 16:44:26

标签: c++ 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 个答案:

答案 0 :(得分:4)

“我需要一个可以通过网络打开文件的命令”是一个真正的真正的高级操作,因此,它掩盖了各种细节:什么样的网络协议应该用吗?如何处理身份验证?如何处理网络错误?文件打开后应该怎么做:读/写/两者,顺序或随机?

librsync相对较低,甚至不尝试回答这些问题。 Its README解释说:

  

librsync不实现rsync有线协议。如果要与rsync服务器通信以传输文件,则需要将其发送到rsync。 librsync用于构建与rsync一样高效传输文件的其他程序。您可以使用librsync制作备份工具,将二进制补丁分发给程序,或将目录同步到服务器或同级之间。

要通过网络打开文件,您需要实现自己的服务器和线路协议,或者您需要支持rsync等为您处理这些详细信息的命令(如果大多数你的逻辑是在发布其他命令,C ++可能不是最好的工具。

答案 1 :(得分:1)

librsyncfopen都不处理远程文件。

请查看使用GVFS或KIO等虚拟文件系统库:这些库可以通过SFTP打开文件,然后您可以将它们传递给librsync。