FUNOPEN(3)

명칭
funopen, fropen, fwopen - 스트림의 오픈

프로그램 라이브러리
libc

서식
<stdio.h> FILE * funopen(const void *cookie, int (*readfn)(void *, char *, int), int (*writefn)(void *, const char *, int), fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *)) FILE * fropen(void *cookie, int (*readfn)(void *, char *, int)) FILE * fwopen(void *cookie, int (*writefn)(void *, const char *, int))

해설
funopen() 함수는, 스트림을 최대 4 개(살)의 “I/O 함수” 에 관련짓습니다. readfn 인가 writefn 의 어느 쪽인지는 반드시 지정하지 않으면 안됩니다. 그 이외의 개소에는 적당한 형태의 NULL 포인터를 줄 수가 있습니다. 이러한 I/O 함수는, 새로운 스트림에 대한다 독 붐비어, 기록, 시크, 클로우즈를 위해서(때문에) 사용됩니다.

통상, 함수를 생략 했다고 하는 것은, 작성된 스트림에 관련지을 수 있었던 조작을 실행하면(자) 실패하는, 그렇다고 하는 것을 의미하고 있습니다. 클로우즈 함수가 생략 되고 있는 경우는, 스트림을 닫으면(자) 버퍼링 되고 있는 출력이 플래시 되어 성공해 종료합니다.

readfn, writefn, seekfn, closefn 의 호출 규칙은, 각각 read(2), write(2), seek(2), lseek(2), close(2) 의 것과 같습니다만, 통상 파일 기술자 인수가 놓여지는 장소에, funopen() (으)로 지정되었다 cookie 인수가 건네받는다고 하는 차이가 있습니다.

독포함 및 기록 I/O 함수는, setvbuf(3) (을)를 호출하는 것에 의해, 완전하게 버퍼링 된 혹은 행 단위로 버퍼링 된 스트림의 기초가 되는 버퍼를 변경하는 것이 허가되고 있습니다. 버퍼를 완전하게 채우거나 완전하게 비우거나 하는 것까지는 요구되지 않습니다. 그러나, 버퍼링되어 있지 않은 상태로부터 버퍼링 된 상태로 변경하거나 행 버퍼의 플래그 상태를 변경하거나 하는 것은 허가되고 있지 않습니다. 최근 지정된 이외의 버퍼에 대해서 독포함이나 기록의 호출이 발생하기로 준비해 둘 필요가 있습니다.

모든 유저 I/O 함수는,-1 을 돌려주는 것으로 에러를 보고할 수가 있습니다. 게다가 에러가 발생했을 경우, 모든 함수는 외부 변수 errno (을)를 적절히 설정할 필요가 있습니다.

closefn() 에서의 에러는, 스트림을 연 상태에는 보관 유지하지 않습니다.

편의를 꾀하기 위해, 인클루드 파일 <stdio.h> 그럼, funopen() (을)를 독 붐비어 또는 기록 함수만을 지정해 호출할 때와 같은, fropen() 매크로와 fwopen() 매크로가 정의되고 있습니다.

반환값
성공해 종료하면(자), funopen() 하 FILE 포인터를 돌려줍니다. 그 이외의 경우에서는 NULL 하지만 돌려주어져 에러를 나타내는 값이 글로벌 변수 errno (으)로 설정됩니다.

에러

[EINVAL]
    funopen() 함수가, 독포함 함수 또는 기록 함수의 어느쪽이나 지정되지 않고 불려 갔습니다. funopen() 함수는 실패했을 때에 malloc(3) routine를 위해서(때문에) 지정된 에러를 errno (으)로 설정하는 일도 있습니다.

관련 항목
fcntl(2), open(2), fclose(3), fopen(3), fseek(3), setbuf(3)

역사
funopen() 함수는 4.4BSD 그리고 처음 등장했습니다.

버그
funopen() 함수는 BSD 이외의 시스템에는 이식 가능하지 않을지도 모릅니다.