2010-03-01 60 views
3

我想从C程序(OS X)控制ftp客户端。我做了fork和execve - 进程已经开始正常。问题在于管道 - 我可以发送命令给ftp客户端进程,并从中获得反馈(如果我发送“帮助\ n”,我会返回帮助输出),但是我从来没有在管道中获得的是“ftp>”提示符。有任何想法吗?ftp客户端通过C管道控制

伊万

+0

你可能真的考虑命令(程序)一样FTPGET,FTPPUT,卷曲或wget的,并且因此,它们对于非交互式作业更适合,并会为你节省大量的头痛 - 除非你写只是一个前端为完全交互式的ftp。 – 2010-03-01 12:31:26

回答

1

一个程序可以检查stdin找出它是否是一个终端或管道。在你的情况下,FTP程序可能会这样做(例如,要知道它是否可以使用转义序列来呈现进度条或提供命令行编辑)。

如果你真的需要提示时,你不得不考虑PTYs(伪终端),它模拟一个控制台。

0

大胆猜测:是不是 “FTP>” 提示符写入STDERR?

3

你的FTP客户端可能表现不同,如果标准输入/输出是终端还是其他什么东西(很多程序做,一开始C库执行缓冲以不同的方式...)如果你想控制,搜索有关伪终端的信息,这有点过于技术性,无法在这里解释。 (并且首先看expect这样的程序,有可能你不必写你的程序)。

+1

+1为'期望',它是专门为此目的而设计的。 – 2010-03-01 09:37:07

+0

啊,编程(带'expect')登录对话到老式(调制解调器)ISP的记忆...... – 2010-03-01 13:19:30