我编写了一个 ftp.exp 文件,该文件将C应用程序的日志文件发送到服务器。
#!/usr/bin/expect
set timeout -1
spawn ftp xxx.xxx.xxx 21
match_max 100000
expect -re {[2]{2,}[0]{1,}}
send -- "usrxxxx"
expect -exact "usrxxxxx"
send -- "\r"
expect -re {[3]{2,}[1]{1,}}
send -- "xxxx\r"
expect -exact "\r
230 Access granted for xxxxxxxxxx !\r
Remote system type is UNIX.\r
Using binary mode to transfer files.\r
ftp> "
send -- "put /home/User/test.txt test2.txt\r"
expect -exact "put /home/User/test.txt test2.txt\r"
send -- "\r"
expect -re {[2]{2,}[6]{1,}}
send -- "quit\r"
expect eof
该脚本运行正常,但如何从 C Application 执行该文件。
答案 0 :(得分:3)
您需要使用libexpect并从其api调用您的脚本。
我发现它只有php绑定,但我没有Debian告诉你什么包提供了基础包。
答案 1 :(得分:1)
您可以使用system(3)或popen(3)库函数从C代码运行您的expect脚本。这些功能正在使用syscalls,fork(2),execve(2),pipe(2),dup(2),您也可以自己使用。
我强烈建议您详细了解waitpid(2)和advanced unix programming;有一些概念和技巧需要学习。
我相信您最好使用ssh
(使用scp
)而不是期望脚本在线路上向普通远程FTP服务器发送普通密码(您的方法存在一些安全问题) )。