2012-09-08 120 views
0

文件我编写了一个ftp.exp文件,该文件发送C应用程序的日志文件到服务器。呼叫预期由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应用文件。

回答

1

您可以使用system(3)popen(3)库函数从C代码运行期望的脚本。这些功能使用syscalls,如fork(2),execve(2),pipe(2),dup(2),waitpid(2),你也可以自己使用。

我强烈建议学习更多关于advanced unix programmingadvanced linux programming;有一些学习的概念和技巧。

我相信你会更好地使用ssh(与scp)比期望脚本发送简单的密码到远方的远程FTP服务器(你的方法有一些安全问题)。

+0

我知道ftp的安全问题......但服务器只是一个测试服务器...... thks反正...... – Fendrix

+0

您可以使用syslog(3)库函数并正确配置您的系统日志服务例如你的'syslogd')远程发送一些日志。 –

3

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

我只找到了PHP绑定,但我没有Debian的这里告诉你什么软件包提供基本包。