以下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。我该如何解决这个问题?
虽然您可以使用 expect 或其他东西从命令行调用 scp,但如果可能的话,您最好使用库。
开发时的一般规则是尽可能选择库而不是系统执行。它使您的代码更简洁、更便携。例外情况是,如果您正在编写 shell 脚本。
libssh2 是一个免费的 C 库,支持密码认证以及 SCP/SFTP 并支持 OS X。
libcurl 几乎支持您可能需要的所有文件传输类型,几乎适用于您可能需要的所有平台,并且具有几乎所有您可能需要的语言的绑定。