2010-03-01 61 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