READ(2)

명칭
read, readv, pread - 입력을 독해

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/uio.h> <unistd.h> ssize_t read(int d, void *buf, size_t nbytes) ssize_t readv(int d, const struct iovec *iov, int iovcnt) ssize_t pread(int d, void *buf, size_t nbytes, off_t offset)

해설
read() (은)는, 기술자 d 그리고 참조된 오브젝트로부터 buf 하지만 가리키는 버퍼에 nbytes 의 데이터를 독해 깔때기 합니다. readv() (은)는 같은 처리를 실행합니다만, 배열 iov : iov[0], iov[1], ..., iov[iovcnt-1] 의 멤버로 지정된다 iovcnt 개의 버퍼에 입력 데이터를 분산 시킵니다. pread() (은)는 같은 기능을 실행합니다만, 파일내의 지정의 위치로부터 독해후, 파일 포인터를 변경하지 않습니다.

readv() 에 대한다 iovec 구조체는 다음과 같이 정의됩니다.

    struct iovec {
    	char   *iov_base;  /* 베이스 주소 */
    	size_t iov_len;    /* 길이 */
    };

iovec 의 각 엔트리는, 데이터를 배치해야 할 메모리 area의 베이스 주소와 길이를 지정해 있습니다. readv() (은)는, 다음의 엔트리에 진행되기 전에 반드시 area를 완전하게 채웁니다.

시크 가능한 오브젝트상에서는 read() 하 d 에 연결시킬 수 있었던 포인터가 지정하는 위치로부터 개시 합니다 (lseek(2) (을)를 참조). read() (으)로부터의 귀가시에, 포인터는 실제로 독해바이트수 만 증가 당합니다.

시크 할 수 없는 오브젝트는 반드시 현재의 위치로부터 독해. 그러한 오브젝트에 연결시킬 수 있었던 포인터의 값은 미정도리입니다.

처리가 성공하면(자), read(), readv() 및 pread() (은)는, 실제로 독해버퍼내에 배치된 바이트 수를 돌려줍니다. 기술자가 통상 파일을 참조하고 있어, 파일의 종단까지 충분한 양의 바이트가 있으면, 시스템은 요구된 바이트수를 독해일을 프로텍션합니다만, 다른 케이스에서는 그렇지는 않습니다.

반환값
정상적으로 완료하면(자), 실제로 독해바이트수가 돌려주어집니다. 파일 종료 (EOF)가 독해와 0 이 돌려주어집니다. 그렇지 않은 경우는 -1 이 돌려주어 에러를 나타내기 위해서(때문에) 글로벌 변수 errno 하지만 설정됩니다.

에러
read(), readv() 및 pread() (은)는 다음의 경우를 제외해 정상적으로 완료합니다.

[EBADF]
    d (은)는 읽기용으로 오픈된 유효한 파일 또는 소켓의 기술자가 아닙니다.

[EFAULT]
    buf (은)는, 프로세스에 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.

[EIO]
    파일 시스템으로부터 독해는 있는 동안에 입출력 에러가 발생했습니다.

[EINTR]
    데이터가 도착하기 전에, 시그널의 배송에 의해 저속 디바이스로부터의 읽기가 끼어들어졌습니다.

[EINVAL]
    d 에 연결시킬 수 있었던 포인터가 부였습니다.

[EAGAIN]
    파일은 비블로킹 입출력과 마크 되고 있어 읽기의 준비를 할 수 있던 데이터가 없습니다.

게다가 readv() (은)는 다음의 에러 중 1 개를 돌려주는 일이 있습니다.

[EINVAL]
    iovcnt 하지만 0 이하인지, 또는 16 보다 커지고 있습니다.

[EINVAL]
    iov 배열안의 iov_len 값의 1 개가 부였습니다.

[EINVAL]
    iov 배열안의 iov_len 값의 합계가 32 비트 정수를 오버플로우 했습니다.

[EFAULT]
    iov 의 일부가, 프로세스에 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.

pread() 호출도 다음의 에러를 돌려주는 일이 있습니다.

[EINVAL]
    지정의 파일 오프셋(offset)가 유효하지는 않습니다.

[ESPIPE]
    파일 기술자가 파이프, 소켓, 또는 FIFO 에 연결시킬 수 있고 있습니다.

관련 항목
dup(2), fcntl(2), open(2), pipe(2), select(2), socket(2), socketpair(2)

표준
read() 함수는 p1003.1-90 에 준거하고 있습니다. readv() 함수와 pread() 함수는 xpg4. 2 에 준거하고 있습니다.

역사
pread() 함수는 AT&T UNIX 4 그리고 등장했습니다. readv() 함수는 4.2BSD 그리고 등장했습니다. read() 함수는 AT&T UNIX 그리고 등장했습니다.