如何从 C 程序 scp?

use*_*636 2 c scp

以下C程序编译并吐出“/Users/home/tempdir”目录的目录列表。

#include <stdio.h>
#include <unistd.h>
int main(int argc, const char * argv[])
{
        execl("/bin/ls", "ls", "/Users/home/tempdir");
        // execl("/usr/bin/scp", "scp", "myfile.txt home@127.0.0.1:/Users/home/scpdir");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这表明可以从 C 程序执行二进制文件。我想弄清楚如何执行“scp”二进制文件并输入所需的密码。如何修改上述代码以实现通过 scp 成功传输文件?

我尝试了上面注释掉的行,但是当它被取消注释时,我收到以下消息:

usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2
Run Code Online (Sandbox Code Playgroud)

所以它显然试图在没有密码的情况下执行 scp。我该如何解决这个问题?

jmh*_*jmh 5

虽然您可以使用 expect 或其他东西从命令行调用 scp,但如果可能的话,您最好使用库。

开发时的一般规则是尽可能选择库而不是系统执行。它使您的代码更简洁、更便携。例外情况是,如果您正在编写 shell 脚本。

http://www.libssh2.org/

libssh2 是一个免费的 C 库,支持密码认证以及 SCP/SFTP 并支持 OS X。

http://curl.haxx.se/libcurl/

libcurl 几乎支持您可能需要的所有文件传输类型,几乎适用于您可能需要的所有平台,并且具有几乎所有您可能需要的语言的绑定。