使用C在本地存储远程文件

时间:2015-01-13 19:14:43

标签: c rsync

我们目前拥有用C语言编写的代码,我必须添加逻辑以获取文件中特定内容的证据概念证明。所以我想要完成的是:

1 - 将此文件(/etc/vpnc/test.conf)从远程计算机下载到临时文件(本地)

2 - 搜索显示证据的多汁的东西在布丁中。 恩。 /etc/vpnc/test.conf

IPSec ID TestID
IPSec gateway blah.blah.com 
IPSec secret 123456
Xauth username blah_user
Xauth password 123456!
IKE Authmode psk
#IKE DH Group dh2
#NAT Traversal Mode cisco-udp
Local Port 10000
DPD idle timeout (our side) 0

3 - 最后,只需使用已经存在的自定义函数将我的发现打印到stdout.ex:

Xauth username blah_user 

其他人建议使用tmpnam和/或mkstemp函数

 #include <stdio.h>

 int main() {
    char buf[4096];
    char *n=tmpnam(NULL); // Use this as the file name, not tmp_file.

 // get the file
  ... 

    FILE *fp=fopen(n, "r");
    unlink(n);
    // Read a line into 'buf' until we run out of lines
    while(fgets(buf, 4096, fp))
    {
            // Check the contents of 'buf' for what you want
    }
}

但我缺乏了解C已经减缓了我的速度。所以看看上面的代码,我如何得到以下结果: 代码:

 rsync rsync://192.168.3.1/vpnc/test.conf

进入&#34; n&#34;临时文件?请原谅我的愚蠢。我保证我会拿一本C书来停止讨论论坛

1 个答案:

答案 0 :(得分:0)

这是一种方式:

char cmd[200];
sprintf(cmd,"rsync rsync://192.168.3.1/vpnc/test.conf %s",n);
system(cmd);
FILE *fp=fopen(n, "r");

我假设tmpnam将返回一个不包含特殊字符的足够短文件名。通常这些名称只有10个字符左右,所以它应该很容易与char cmd[200]一起放在命令的其余部分。