ギリギリ行けるお一人様のライン

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

A 回答 (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専用としてはサイズが大きそうな気はしますが、簡単に使えそうではありますね。

この回答への補足

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

補足日時:2009/02/13 07:32
    • good
    • 0

>C言語でFTPを使用してあるサーバからデータをダウンロードするプログラムを作りたいのですが


これだけの処理ならCなど使わずに
シェルスクリプトでftpやwgetでできそうですけど
そうすれば
>Solaris,RedHatなど主要な
も気にする必要もないし
>gccのバージョン3~4ぐらいで使えること
も気にする必要がないですけど

とりあえず
http://www.google.co.jp/search?hl=ja&safe=off&q= …

http://x68000.q-e-d.net/~68user/net/c-ftp-1.html
ググった結果最初に引っかかったページ。

この回答への補足

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

補足日時:2009/02/01 19:40
    • good
    • 0

SolarisはUNIXであってLinuxじゃありません、というのはさておいて。



libOftpというモノがあるようです。(1.0 Stableで開発終わってるようですが)
http://sourceforge.net/projects/libftp/
ただし使えるかどうかはやってみないとわかりません。
ライセンスはCDDL/GPLのデュアルライセンスのようです。

>#1
ログインの必要がないとこだけならsystem()でwget投げるってのは案外いいアイディアじゃないですか?

この回答への補足

>SolarisはUNIXであってLinuxじゃありません
失礼しました。

libftp検討してみます。

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

補足日時:2009/02/01 17:55
    • good
    • 0

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

この回答への補足

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

補足日時:2009/02/01 17:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報