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 인수는, 전송 옵션을 지정하는 캐릭터의 string입니다. 각각의 플래그의 의미는 스킴에 따라서 다르므로, 이하의 적절한 섹션을 참조해 주세요.

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() (은)는 널 캐릭터로 끝나는 string의 URL 를 취해, RFC1738 에 규정되고 있다 Common Internet Scheme Syntax 에 따라, 그 URL 를 컴퍼넌트 함수로 분할합니다. 이 문장구조법을 만드는 정규 표현은 이하대로입니다.

        <scheme>:(//(<user>(:<pwd>)? @)? <host>(:<port>)? )? /(<document>)?

URL 의 일부의 컴퍼넌트는, 모든 URL 스킴으로 중요하지 않는 것이 있는 것에 주의해 주세요. 예를 들어 파일 스킴에서는,<scheme> 컴퍼넌트와 <document> 컴퍼넌트 밖에 필요 없습니다.

fetchParseURL() 하지만 되돌리는 포인터는, free() 그리고 해방해 주세요.

fetchGet() , fetchPut() , fetchStat() (은)는, 포인터의 형식의 사전 해석이 끝난 URL 가 string는 아니고 struct url 그리고 필요하게 되는 것을 제외하면, fetchGetURL() , fetchPutURL() , fetchStatURL() (을)를 닮아 있습니다.

모든 fetchGetXXX() 함수와 fetchPutXXX() 함수는, 요구된 문서로부터의 데이터의 독포함이나 요구된 문서에의 데이터의 기록에 사용할 수 있는 스트림의 포인터를 되돌립니다. 각각의 액세스 수법의 시스템 자세한 것은 다릅니다만, fetchGetXXX() 함수가 되돌리는 스트림은 독포함 전용으로, fetchPutXXX() 하지만 되돌리는 스트림은 기록 전용이라고 일반적으로 가정됩니다.

파일 스킴
fetchGetFile() (와)과 fetchPutFile() 그럼, 로컬에 mount 된 파일 시스템의 파일인 문서에 액세스 할 수 있습니다. 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]
    오퍼레이션이 이상종료(ABEND) 했습니다.

[FETCH_AUTH]
    인증이 에러가 되었습니다.

[FETCH_DOWN]
    서비스를 사용할 수 없습니다.

[FETCH_EXISTS]
    파일이 존재합니다.

[FETCH_FULL]
    파일 시스템의 용량이 부족합니다.

[FETCH_INFO]
    정보로서의 응답입니다.

[FETCH_MEMORY]
    메모리가 부족합니다.

[FETCH_MOVED]
    파일이 이동되었습니다.

[FETCH_NETWORK]
    네트워크 에러

[FETCH_OK]
    에러는 없습니다.

[FETCH_PROTO]
    프로토콜 에러

[FETCH_RESOLV]
    resolver 에러

[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, M. McCahill, December 1994, Uniform Resource Locators (URL), RFC1738. R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, Januray 1997, Hypertext Transfer Protocol -- HTTP/1. 1, RFC2068. J. Postel, J. K. Reynolds, October 1985, File Transfer Protocol, 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 로 스페이스등을 encode 하는 시도 이야기해지고 있지 않습니다. URL 의 문서 부분의 스페이스는, HTTP URL 로 "%20" 에, FTP URL로 "\ " 에 옮겨놓을 필요가 있습니다.

에러 번호는, 특정 문맥만으로 일의입니다. FTP 와 HTTP 로 사용하는 에러 코드, 및 resolver와 시스템의 에러로 사용하는 에러 코드는 중복 합니다. 예를 들어 에러 코드 202 는, FTP에서는 "Command not implemented, superfluous at this site" 를 나타내, HTTP 에서는 "Accepted" 를 나타냅니다.

이 메뉴얼 페이지는 불충분해, 텍스트의 포맷도 갖추어져 있지 않습니다.

그 외에도 많은 일이 있습니다.