ftpio(3)

名称
ftpLogin, ftpChdir, ftpErrno, ftpGetModtime, ftpGetSize, ftpGet, ftpPut, ftpBinary, ftpPassive, ftpVerbose, ftpGetURL, ftpPutURL - FTPIO ユーザライブラリ

書式
#include <ftpio.h> FILE * ftpLogin(char *host, char *user, char *passwd, int ftp_port, int verbose, int *retcode) int ftpChdir(FILE *stream, char *dirname) int ftpErrno(FILE *stream) const char * ftpErrString(int errno) time_t ftpGetModtime(FILE *stream, char *file) off_t ftpGetSize(FILE *stream, char *file) FILE * ftpGet(FILE *stream, char *file, off_t *seekto) FILE * ftpPut(FILE *stream, char *file) int ftpAscii(FILE *stream) int ftpBinary(FILE *stream) int ftpPassive(FILE *stream, int status) void ftpVerbose(FILE *stream, int status) FILE * ftpGetURL(char *url, char *user, char *passwd, int *retcode) FILE * ftpPutURL(char *url, char *user, char *passwd, int *retcode)

解説
この関数は、FTP コネクションを管理するための 高レベルなライブラリを実装します。

ftpLogin() は、指定された user, passwd, ftp_port (0 を渡した場合、標準 FTP ポートの 21 がデフォルトで ftp_port になる), verbose フィールドを 使用してログインしようとします。ログインに成功すれば、標準的な ストリーム記述子が戻されます。この記述子は、後の FTP オペレーションに 渡してください。エラーが発生した場合は NULL が戻され、 retcode には、外部サーバが戻すエラーコードが入ります。

ftpChdir() は、サーバの CD コマンドを出し、 dir で指定された ディレクトリに変更しようとします。問題がなければゼロが戻されます。 問題がある場合は、サーバのエラーコードが戻されます。

ftpErrno() は、最後のオペレーションのサーバエラーコードを戻します。 FTP のエラーコードに精通している場合は、エラーの原因の確認に有益です。 ftpErrString() は、人間が判読できるサーバエラーコードを戻します。

ftpGet() は、 file 引数が指定するファイルを取り出し (FTP サーバのカレントディレクトリ からの相対パスと想定される。 ftpChdir() 参照)、そのファイルのための新しい FILE* ポインタを戻します。 エラーが発生した場合は NULL を戻します。 seekto が NULL ではない場合、これが指す整数の内容は、ファイルの再開ポイント として使用されます。つまり、戻されたストリームは、ファイルの *seekto バイトを指しているということです。これは、エラーで失敗した転送を 効率的に再開する際に便利です。シーク操作がエラーになった場合、 *seekto の値はゼロになります。

ftpGetModtime() は、 file 引数が指定するファイルの最終修正時刻を 戻します。ファイルをオープンできない場合は 0 が戻されます。

ftpGetSize() は、 file 引数が指定するファイルのサイズをバイト単位で 戻します。ファイルをオープンできない場合は -1 が戻されます。

ftpPut() は、 file 引数が指定する新しいファイルを作成し (FTP サーバのカレントディレクトリからの相対パスと想定される。 ftpChdir() 参照)、ファイルの新しい stream ポインタを戻します。エラーが発生した場合は NULL を戻します。

ftpAscii() は、 stream が指定する現行サーバのコネクションに ASCII モードを設定します。

ftpBinary() は、 stream が指定する現行サーバのコネクションに バイナリモードを設定します。

ftpPassive() は、 stream が指定する現在のサーバのコネクションのパッシブモード (ファイアウォール用)を論理値 status に設定します。

ftpVerbose() は、 stream が指定する現在のサーバのコネクションの冗長モードを論理値 status に設定します。

ftpGetURL() は、 URL が指定するファイルを取り出します。これは、 サーバの stream が戻されないこと除けば、 ftpLogin(), ftpChdir(), ftpGet() を組み合わせた操作と同じとみなすことができます。 サーバとのコネクションは、ファイルが完全に読み込まれた時点で クローズされます。複数のファイルを取り出す場合は、低レベルのルーチン を使用してください。この方がはるかに効率的です。

ftpPutURL() は、 URL が指定するファイルを作成します。これは、 サーバの stream が戻されないことを除けば、 ftpLogin(), ftpChdir(), ftpPut() を組み合わせた操作と同じとみなすことができます。 サーバとのコネクションは、ファイルが完全に書き込まれた時点で クローズされます。複数のファイルを作成する場合は、低レベルのルーチン を使用してください。この方がはるかに効率的です。

環境変数

FTP_TIMEOUT
    FTP 接続を異常終了させる前に、通信相手からの応答を待つ最大時間 (秒単位) です。

FTP_PASSIVE_MODE
    パッシブモード FTP を強制的に使用します。

バグ
こいつを徹底的に使い込むと、内部状態マシンを混乱させてしまう可能性が ありますが、私がテストした限りでは、非常に丈夫に作られていることが 確かめてあります。

歴史
Poul-Henning Kamp のシステムインストレーションユーティリティ用 ftp ドライバとして始まり、Jordan Hubbard が、stdio の拡張という より一般的な形式に変更しました。 Jean-Marc Zucconi のアイデアと拡張機能もいくつか盛り込まれています。

作者
Jordan Hubbard, Poul-Henning Kamp, Jean-Marc Zucconi