从C调用expect文件

时间:2012-09-08 13:44:45

标签: c linux ubuntu expect ubuntu-12.04

我编写了一个 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 执行该文件。

2 个答案:

答案 0 :(得分:3)

您需要使用libexpect并从其api调用您的脚本。

我发现它只有php绑定,但我没有Debian告诉你什么包提供了基础包。

答案 1 :(得分:1)

您可以使用system(3)popen(3)库函数从C代码运行您的expect脚本。这些功能正在使用syscallsfork(2)execve(2)pipe(2)dup(2),您也可以自己使用。

我强烈建议您详细了解waitpid(2)advanced unix programming;有一些概念和技巧需要学习。

我相信您最好使用ssh(使用scp)而不是期望脚本在线路上向普通远程FTP服务器发送普通密码(您的方法存在一些安全问题) )。