仕事で日次業務があるのだが、
これを簡便化しようかと思って、プログラムを組んでた。
そしたら、どうしてもFTPでファイルを取得しないといけなくて、
system関数使って取得するのも癪だなぁと思い、
FTPクライアントを実装してみることにした。
まぁ、FTPの実装なんて簡単だろうと思ってたんだけど、
(サンプルも結構あるし)
意外や意外、難しかった。
getはFTPサーバからのメッセージを
クライアント側で受け取り用サーバを立てて読み取ればいいんだけど、
(日本語おかしいな)
putがどうも上手くいかない。
STORコマンドをサーバに送信すると、
確かにサーバ側にファイルは作成されているんだけど、
どうもファイルの中身がない。
おかしいなぁと思って試行錯誤するが上手くいかない。
(具体的には、サーバに対してソケットであれこれ送ってみた)
どうも、サーバ側のファイルに対して直接書き込む必要があるなぁと思いつつ、
さすがにギブアップと思って、
GNUのinetutilsの実装を見てびっくり。
fdopen使ってるよ!!
そっか、UNIXはソケットもファイルディスケットもいっしょだっけ。
とりあえずcygwinだから真似たら動いたけど、
Windowsにどうやって移植するんだろ?
とりあえず、へなちょこながら、C++っぽいFTPクライアントができた。
特徴は、streamを使って送受信できることかな。
多分、get(const string& file, std::ostream& out)のインターフェースは便利なはず。
(ってか、これがほしかっただけなんだけどね、余計な分まで実装しちゃった)
2 comments:
cが出来るといろいろ出来ていいね
できるというほどできないけどね。
Post a Comment