- ベストアンサー
C言語(gcc), Linux, FTPプログラミング
C言語でFTPを使用してあるサーバからデータをダウンロードするプログラムを作りたいのですが、短期間で作らなければならない為、なるべく作り込みはしたくないのです。 FTPを扱うライブラリのようなものがあるのが一番ありがたいのですが、ご存じないでしょうか? 条件としては ・gccのバージョン3~4ぐらいで使えること。 ・Solaris,RedHatなど主要なLinuxで使えること。 ・ライセンスの制限がなるべく無いこと。 以上、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> FTPでアップロードは出来るという記述はあったのですが 私は逆にget出来る、の記述しか見つけられませんでした。 http://www.libcurl.org/ より: > libcurl is a free, open source client to get documents/files from servers, using any of the supported protocols. 対応プロトコルの数を考えるとちとftp専用としてはサイズが大きそうな気はしますが、簡単に使えそうではありますね。
その他の回答 (3)
- xyz951
- ベストアンサー率18% (15/79)
>C言語でFTPを使用してあるサーバからデータをダウンロードするプログラムを作りたいのですが これだけの処理ならCなど使わずに シェルスクリプトでftpやwgetでできそうですけど そうすれば >Solaris,RedHatなど主要な も気にする必要もないし >gccのバージョン3~4ぐらいで使えること も気にする必要がないですけど とりあえず http://www.google.co.jp/search?hl=ja&safe=off&q=FTP+C%E8%A8%80%E8%AA%9E&lr= の http://x68000.q-e-d.net/~68user/net/c-ftp-1.html ググった結果最初に引っかかったページ。
補足
正確にはプログラムのほとんどは既に出来ていて、FTPでデータを取ってくる処理だけ作らないといけないのです。 FTPでデータを取って来る前、取ってきた後の処理は他の人が作ったものが既にあります。
- D-Matsu
- ベストアンサー率45% (1080/2394)
SolarisはUNIXであってLinuxじゃありません、というのはさておいて。 libOftpというモノがあるようです。(1.0 Stableで開発終わってるようですが) http://sourceforge.net/projects/libftp/ ただし使えるかどうかはやってみないとわかりません。 ライセンスはCDDL/GPLのデュアルライセンスのようです。 >#1 ログインの必要がないとこだけならsystem()でwget投げるってのは案外いいアイディアじゃないですか?
補足
>SolarisはUNIXであってLinuxじゃありません 失礼しました。 libftp検討してみます。 調べていてlibcurlというのを見かけたのですが、これは使えないでしょうか? FTPでアップロードは出来るという記述はあったのですがダウンロードが出来るとは書いてありませんでした。
- SAYKA
- ベストアンサー率34% (944/2776)
wgetを経由するとか・・・は だめか・・・
補足
system()を使うのは最後の手段にしたいです。
補足
libcurlでFTPダウンロード出来ることを確認しました。 ありがとうございました。 struct FtpInfo{ const char *fname; FILE *stream; }; size_t ftpWriteFunc(void *buf, size_t size, size_t nmemb, void *stream) { struct FtpInfo *f; f = (struct FtpInfo *)stream; if(f && !f->stream){ f->stream = fopen(f->fname, "wb"); if(!f->stream){ return(-1); } } return(fwrite(buf, size, nmemb, f->stream)); } : : CURL *c; struct FtpInfo f; f.stream = NULL; /* 初期処理 */ curl_global_init(CURL_GLOBAL_DEFAULT); c = curl_easy_init(); /* 詳細表示 */ curl_easy_setopt(c, CURLOPT_VERBOSE, 1); /* 設定 */ sprintf(buf, "%s:%s", username, password); curl_easy_setopt(c, CURLOPT_USERPWD, buf); sprintf(buf, "ftp://%s/%s/%s", servername, filepath, filename); curl_easy_setopt(c, CURLOPT_URL, buf); curl_easy_setopt(c, CURLOPT_WRITEFUNCTION, ftpWriteFunc); curl_easy_setopt(c, CURLOPT_WRITEDATA, &f); /* FTPでデータ取得 */ cret = curl_easy_perform(c); /* 終了処理 */ curl_easy_cleanup(c);