日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
FETCH(3) FreeBSD Library Functions Manual FETCH(3)
名称
fetchGetURL, fetchPutURL, fetchStatURL, fetchListURL, fetchParseURL,
fetchGet, fetchPut, fetchStat, fetchList, fetchGetFile, fetchPutFile,
fetchStatFile, fetchListFile, fetchGetHTTP, fetchPutHTTP, fetchStatHTTP,
fetchListHTTP, fetchGetFTP, fetchPutFTP fetchStatFTP fetchListFTP, - ファ
イル転送ライブラリ
書式
#include <sys/param.h>
#include <stdio.h>
#include <fetch.h>
FILE *
fetchGetURL(char *URL, char *flags)
FILE *
fetchPutURL(char *URL, char *flags)
int
fetchStatURL(char *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchListURL(char *URL, char *flags)
struct url *
fetchParseURL(char *URL, char *flags)
FILE *
fetchGet(struct url *URL, char *flags)
FILE *
fetchPut(struct url *URL, char *flags)
int
fetchStat(struct url *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchList(struct url *, char *flags)
FILE *
fetchGetFile(struct url *u, char *flags)
FILE *
fetchPutFile(struct url *u, char *flags)
int
fetchStatFile(struct url *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchListFile(struct url *, char *flags)
FILE *
fetchGetHTTP(struct url *u, char *flags)
FILE *
fetchPutHTTP(struct url *u, char *flags)
int
fetchStatHTTP(struct url *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchListHTTP(struct url *, char *flags)
FILE *
fetchGetFTP(struct url *u, char *flags)
FILE *
fetchPutFTP(struct url *u, char *flags)
int
fetchStatFTP(struct url *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchListFTP(struct url *, char *flags)
解説
この関数は、URL (Uniform Resource Locators) を使用してファイルの取り出し
とアップロードを行なう、高レベルなライブラリを実現します。
fetchGetURL() と fetchPutURL() は、 fetch ライブラリのインタフェースを構
成します。この関数は渡された URL を検査して転送手法を決め、適切な低レベル
関数を呼び出して実際の転送を実行します。 flags 引数は、転送オプションを指
定するキャラクタのストリングです。それぞれのフラグの意味はスキームによっ
て異なるので、以下の適切なセクションを参照してください。
fetchStatURL() は、要求された文書のメタデータを入手し、第 2 引数が指す構
造体にデータを入力しようとします。 url_stat 構造体は、 <fetch.h> で以下の
ように定義されています。
struct url_stat {
off_t size;
time_t atime;
time_t mtime;
};
fetchListURL() は、指定された URL が指すディレクトリの内容をリストしよう
とします。問題がなければ、malloc で割り振られた url_ent 構造体の配列を戻
します。 url_ent 構造体は、 <fetch.h> で以下のように定義されています。
struct url_ent {
char name[MAXPATHLEN];
struct url_stat stat;
};
リストは、名前がないエントリで終わります。
fetchListURL() が戻すポインタは、 free() で解放してください。
fetchParseURL() はナル文字で終わるストリングの URL を取り、RFC1738 に規定
されている Common Internet Scheme Syntax に従って、その URL をコンポーネ
ント関数に分割します。このシンタックスを作る正規表現は以下のとおりです。
<scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
URL の一部のコンポーネントは、すべての URL スキームで重要ではないことがあ
ることに注意してください。たとえばファイルスキームでは、<scheme> コンポー
ネントと <document> コンポーネントしか必要ありません。
fetchParseURL() が戻すポインタは、 free() で解放してください。
fetchGet()、 fetchPut()、 fetchStat() は、ポインタの形式の事前解析済み
URL がストリングではなく struct url で必要になることを除けば、
fetchGetURL()、 fetchPutURL()、 fetchStatURL() に似ています。
すべての fetchGetXXX() 関数と fetchPutXXX() 関数は、要求された文書からの
データの読込みや要求された文書へのデータの書込みに使用できるストリームの
ポインタを戻します。それぞれのアクセス手法のシステム詳細は異なりますが、
fetchGetXXX() 関数が戻すストリームは読込み専用で、 fetchPutXXX() が戻すス
トリームは書込み専用であると一般的に仮定されます。
ファイルスキーム
fetchGetFile() と fetchPutFile() では、ローカルにマウントされたファイルシ
ステムのファイルである文書にアクセスできます。URL の <document> コンポー
ネントのみが使用されます。
fetchGetFile() はフラグを受け入れません。
fetchPutFile() は、 a フラグ (ファイルに追加) を受け入れます。このフラグ
を指定した場合、 fetchPutFile() が戻すストリームへ書き込まれたデータは、
ファイルの前の内容を置き換えるのではなくファイルの前の内容に追加されま
す。
FTP スキーム
fetchGetFTP() と fetchPutFTP() は、RFC959 に記述されているように FTP プロ
トコルを実現します。
p フラグ (受動) を指定すると、能動的ではなく受動的な接続が試されます。
ユーザ名かパスワードを指定しないと、 fetch ライブラリは、ユーザ名"ftp"、
パスワード"ftp" で匿名ログインを試します。
HTTP スキーム
fetchGetHTTP() 関数と fetchPutHTTP() 関数は、HTTP/1.1 プロトコルを実現し
ます。この関数は、RFC2068 に準拠する可能性があります。
fetch ライブラリと調和する方法で HTTP PUT 手法を実現する適切な方法がない
ようなので、 fetchPutHTTP() は現在のところ実現されていません。
戻り値
fetchParseURL() は、URL のそれぞれのコンポーネントを含む struct url のポ
インタを戻します。メモリを割り振れない場合、または URL のシンタックスが正
しくない場合、 fetchParseURL() は NULL ポインタを戻します。
fetchStat() 関数は、問題がなければ 0 を戻し、問題がある場合は -1 を戻しま
す。
その他すべての関数は、要求された文書へのアクセスに使用できるストリームの
ポインタを戻します。エラーが発生した場合は NULL を戻します。
Libfetch は、Common Error Library (libcom_err) を使用してエラーを報告しま
す。 com_err() に渡されるエラーコードは以下のとおりです。
[FETCH_ABORT]
オペレーションが異常終了しました。
[FETCH_AUTH] 認証がエラーになりました。
[FETCH_DOWN] サービスが使用できません。
[FETCH_EXISTS]
ファイルが存在します。
[FETCH_FULL] ファイルシステムの容量が不足しています。
[FETCH_INFO] 情報としての応答です。
[FETCH_MEMORY]
メモリが不足しています。
[FETCH_MOVED]
ファイルが移動されました。
[FETCH_NETWORK]
ネットワークエラー
[FETCH_OK] エラーはありません。
[FETCH_PROTO]
プロトコルエラー
[FETCH_RESOLV]
リゾルバエラー
[FETCH_SERVER]
サーバエラー
[FETCH_TEMP] 一時的なエラー
[FETCH_TIMEOUT]
オペレーションがタイムアウトになりました。
[FETCH_UNAVAIL]
ファイルが使用できません。
[FETCH_UNKNOWN]
未知のエラー
[FETCH_URL] URL が正しくありません。
エラーメッセージには、"File is not available (404 Not Found)" のように、
プロトコルのエラーコードとメッセージが組み込まれます。
環境変数
FTP と HTTP に関連した関数は、ファイル転送に使用するプロキシサーバのアド
レスとして、 HTTP_PROXY 環境変数と FTP_PROXY 環境変数を使用します。
関連項目
com_err(3), fetch(1), ftpio(3)
T. Berners-Lee, L. Masinter, and M. McCahill, Uniform Resource Locators
(URL), December 1994, RFC1738.
R. Fielding, J. Gettys, J. Mogul, H. Frystyk, and T. Berners-Lee,
Hypertext Transfer Protocol -- HTTP/1.1, Januray 1997, RFC2068.
J. Postel, and J. K. Reynolds, File Transfer Protocol, October 1985,
RFC959.
注
fetch ライブラリは Common Error ライブラリを使用するので、 libfetch にリ
ンクするアプリケーションは、 libcom_err にもリンクする必要があります。
歴史
fetch ライブラリは、 FreeBSD 3.0 に追加されました。
作者
fetch ライブラリは、 Jordan K. Hubbard <jkh@FreeBSD.org>,
Eugene Skepner <eu@qub.com>、その他の FreeBSD 開発者の提案を受け入れ、
Dag-Erling Coidan Smograv <des@FreeBSD.org> が作成しました。これにより、
Poul-Henning Kamp <pkh@FreeBSD.org> と
Jordan K. Hubbard <jkh@FreeBSD.org> が作成した ftpio が置き換えられまし
た。
このマニュアルページの筆者は、
Dag-Erling Coidan Smograv <des@FreeBSD.org> です。
バグ
fetchPutHTTP()、 fetchStatHTTP()、 fetchListHTTP()、 fetchListFTP()、FTP
プロキシサポートなど、ライブラリの一部はまだ実現されていません。
HTTP_PROXY 環境変数か FTP_PROXY 環境変数を適切に設定する以外、プロキシを
実行時に選択する方法はありません。この環境変数を設定した場合は、FTP 関数
と HTTP 関数によるプロキシの使用を止めることはできません。
HTTP 認証は動作しません。調査した範囲では、コードにバグがあるとは言い切れ
ません。 libfetch は HTTP/1.1 基本認証を RFC2068 のとおりに正しく処理しま
すが、HTTP サーバは、認証のヘッダフィールドを受け入れません。また
libfetch は、HTTP サーバの認証要求を解釈してそれに応答しようとしません。
URL でスペースなどをエンコードする試みはなされていません。URL の文書部分
のスペースは、HTTP URL で"%20" に、FTP URL で"\ " に置き換える必要があり
ます。
エラー番号は、特定コンテキストのみで一意です。FTP と HTTP で使用するエラ
ーコード、およびリゾルバとシステムのエラーで使用するエラーコードは重複し
ます。たとえばエラーコード 202 は、FTP では"Command not implemented, su-
perfluous at this site" を表し、HTTP では"Accepted" を表します。
このマニュアルページは不十分で、テキストのフォーマットも揃っていません。
その他にも多くのことがあります。
BSD July 1, 1998 5