SENDFILE(2)

이름
sendfile - 데이타와 파일 디스크립터사이의 전송.

사용법
#include <sys/sendfile.h>

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count)

설명
이것은 하나의 파일 디스크립터와 다른 파일 디스크립터사이의 복사본 데이타를 호출한다. 이것들중 하나 혹은 둘 모두는 소켓과 관련될런지 모른다. in_fd 는 읽기 위해 열린 파일 디스크립터이고, out_fd 는 쓰기 위해 열린 디스크립터이어야 한다. offset 은 sendfile(2) 가 데이타를 읽기 시작할 입력파일 포인터 지점을 가진 변수 포인터이다. sendfile 이 반환할때, 이 변수는 읽혀진 마지막 바이트를 따르는 바이트의 offset에 설정될 것이다. count 는 파일디스크립터 사이의 복사를 위한 바이트 양이다.

주의
Sendfile은 in_fd 의 현재파일 포인터를 수정하진 못하지만, out_fd 은 수정한다. 당신이 TCP 소켓으로 파일을 보내기 위해 sendfile사용을 계획하지만 파일 내용의 앞부분에 몇개의 헤더 데이타를 보낼 필요가 있다면, 패킷의 수를 최소화하고 실행튜닝을 위해 tcp(7) 의 TCP_CORK 옵션을 본다.

반환값
전송이 성공하면, out_fd 에 기록된 바이트수가 반환된다. 에러시, -1이 반환되고, errno 는 적절히 설정된다.

에러

EBADF
    입력파일이 읽기위해 열리지 않았거나 출력파일이 쓰기위해 열리지 않았다.

EINVAL
    디스크립터가 유효하지 않거나 잠겼다.

ENOMEM
    in_fd 에서 읽기 위한 메모리가 부족하다.

EIO in_fd 에서 읽는 동안 예상외의 에러가 생겼다.

버전S
sendfile 은 리눅스 2.2의 새로운 기능이다. 다른 유닉스에서는 종종 다른 semantics와 프로토타입을 가진 sendfile 를 구현한다. 그것은 이식가능한 프로그램에 사용되지 않아야 한다.

관련 항목
socket(2), open(2)

역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 26일