FTPIO(3)

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

書式
<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) FILE * ftpLoginAf(char *host, int af, char *user, char *passwd, int ftp_port, int verbose, int *retcode) FILE * ftpGetURLAf(char *url, int af, char *user, char *passwd, int *retcode) FILE * ftpPutURLAf(char *url, int af, char *user, char *passwd, int *retcode)

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

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

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

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

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

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() を組み合わせた操作と同じとみなすことができます。 サーバとのコネクションは、ファイルが完全に書き込まれた時点で クローズされます。複数のファイルを作成する場合は、低レベルのルーチン を使用してください。この方がはるかに効率的です。

ftpLoginAf(), ftpGetURLAf(), ftpPutURLAf() は、 ftpLogin(), ftpGetURL(), ftpPutURL() と同様ですが、アドレスファミリ except that they are able to specify address family af を指定可能な点が異なります。

環境変数

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

FTP_PASSIVE_MODE
    定義されている場合、パッシブモード FTP を強制的に使用します。 ただし ``NO'' または ``no'' に定義されている場合は、 アクティブモードを強制的に使用します。 定義されている場合、この変数の設定は、 ftpPassive() の呼び出しに優先します。

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

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

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