• ベストアンサー

C言語(gcc), Linux, FTPプログラミング

C言語でFTPを使用してあるサーバからデータをダウンロードするプログラムを作りたいのですが、短期間で作らなければならない為、なるべく作り込みはしたくないのです。 FTPを扱うライブラリのようなものがあるのが一番ありがたいのですが、ご存じないでしょうか? 条件としては ・gccのバージョン3~4ぐらいで使えること。 ・Solaris,RedHatなど主要なLinuxで使えること。 ・ライセンスの制限がなるべく無いこと。 以上、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.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専用としてはサイズが大きそうな気はしますが、簡単に使えそうではありますね。

OllllllllllllllO
質問者

補足

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);

その他の回答 (3)

  • xyz951
  • ベストアンサー率18% (15/79)
回答No.3

>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 ググった結果最初に引っかかったページ。

OllllllllllllllO
質問者

補足

正確にはプログラムのほとんどは既に出来ていて、FTPでデータを取ってくる処理だけ作らないといけないのです。 FTPでデータを取って来る前、取ってきた後の処理は他の人が作ったものが既にあります。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

SolarisはUNIXであってLinuxじゃありません、というのはさておいて。 libOftpというモノがあるようです。(1.0 Stableで開発終わってるようですが) http://sourceforge.net/projects/libftp/ ただし使えるかどうかはやってみないとわかりません。 ライセンスはCDDL/GPLのデュアルライセンスのようです。 >#1 ログインの必要がないとこだけならsystem()でwget投げるってのは案外いいアイディアじゃないですか?

OllllllllllllllO
質問者

補足

>SolarisはUNIXであってLinuxじゃありません 失礼しました。 libftp検討してみます。 調べていてlibcurlというのを見かけたのですが、これは使えないでしょうか? FTPでアップロードは出来るという記述はあったのですがダウンロードが出来るとは書いてありませんでした。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

wgetを経由するとか・・・は だめか・・・

OllllllllllllllO
質問者

補足

system()を使うのは最後の手段にしたいです。