AIO_READ(2)

명칭
aio_read - 파일로부터의 비동기 읽기 (REALTIME)

프로그램 라이브러리
libc

서식
<time.h> <aio.h> int aio_read(struct aiocb *iocb)

해설
aio_read() 함수는, 호출 프로세스에 기술자 iocb->aio_fildes 의 오프셋(offset) iocb->aio_offset 그리고 시작된다 iocb->aio_nbytes (을)를, iocb->aio_buf 하지만 가리키는 버퍼에 독해같게 합니다. 호출은, 읽기 요구가 기술자에게 기다리는 행렬로서 넣을 수 있고 와 즉시 돌아옵니다. 호출이 돌아온 시점에서 읽기는 완료하고 있는 일도 있고, 완료하고 있지 않는 것도 있습니다.

_POSIX_PRIORITIZED_IO 가 정의되고 있어 게다가 기술자가 이것을 서포트하고 있는 경우에 기다리는 행렬에 넣어지고 있는 조작은, 호출 프로세스의 우선 순위로부터 iocb->aio_reqprio (을)를 줄인 것에 동일한 우선 순위로 서브 미트 됩니다.

iocb->aio_lio_opcode 하 aio_read() 호출에 의해 무시됩니다.

iocb 포인터는, 진행중에 기다리는 행렬에 넣어진 귀가 스테이터스 또는 에러 스테이터스를 판정하기 위해서, aio_return() (와)과 aio_error() 의 인수로서 후에 사용될 가능성이 있습니다.

요구가 기다리는 행렬에 넣어지지 않는 경우 (일반적으로는 무효인 인수를 위해서(때문에)), 호출은 요구를 기다리는 행렬에 넣지 않고 돌아옵니다.

요구가 정상적으로 기다리는 행렬에 넣어지면(자), 문맥으로서 요구동안에 iocb->aio_offset 의 값이 수정될 가능성이 있으므로, 이 값은 요구가 기다리는 행렬에 넣어진 후는 참조해 되지 않습니다.

제한
iocb 하지만 가리키는 비동기 입출력 제어 블록 구조체, 및 그 구조체의 iocb->aio_buf 멤버가 참조하는 버퍼는, 조작이 완료할 때까지 유효한 필요가 있습니다. 이 때문에, 이러한 오브젝트에 대한 자동 (스택) 변수의 사용은 추천 되지 않습니다.

커널에의 올바르지 않은 문맥 정보의 인도를 회피하기 위해서, 비동기 입출력 제어 버퍼 iocb 하 aio_read() 호출 전에 제로로 할 필요가 있습니다.

요구가 기다리는 행렬에 넣어진 후, 요구가 완료할 때까지는 비동기 입출력 제어 블록 구조체 또는 버퍼 내용의 수정은 용서되고 있지 않습니다.

iocb->aio_offset 안의 파일 오프셋(offset)가, iocb->aio_fildes 의 최대 오프셋(offset)를 넘고 있는 경우는 입출력은 행해지지 않습니다.

반환값

진단
없음.

에러
aio_read() (은)는 다음의 경우에 실패합니다.

[EAGAIN]
    system resource의 한계를 위해서(때문에) 요구는 기다리는 행렬에 넣어지지 않았습니다.

[ENOSYS]
    aio_read() 호출이 서포트되고 있지 않습니다.

이후의 조건은, aio_read() 호출이 행해졌을 때에 동기적으로 검출되는 일도 있고, 그 후 언제라도 비동기적으로 검출되는 일도 있습니다. 이것들이 호출해 때에 검출되었을 경우, aio_read() (은)는 -1 을 돌려주어, errno (을)를 적절히 설정합니다. 그렇지 않은 경우는, aio_return() 함수를 호출해,-1 를 돌려주어, errno 에 돌려주어지고 있는 실제의 값을 판정하기 위해서 aio_error() (을)를 호출할 필요가 있습니다.

[EBADF]
    iocb->aio_fildes 하지만 무효입니다.

[EINVAL]
    오프셋(offset) iocb->aio_offset 하지만 유효하지 않은지, iocb->aio_reqprio 에 의해 지정되는 우선 순위가 유효한 우선 순위가 아닌지, 또는 iocb->aio_nbytes 에 의해 지정되는 바이트수가 유효이지 않습니다.

[EOVERFLOW]
    파일은 정규의 파일이며, iocb->aio_nbytes (은)는 제로보다 커서 iocb->aio_offset 안의 개시 오프셋(offset)는 파일의 말미의 전에 있지만, iocb->aio_fildes 오프셋(offset) 최대에 있든가 또는 그것을 넘고 있습니다.

요구가 정상적으로 기다리는 행렬에 넣어졌지만, 다음에 캔슬될까 에러가 발생했을 경우, aio_return() 함수에 의해 돌려주어진 값이 read(2) 호출할 것에 의하는 것이어, aio_error() 함수에 의해 돌려주어지는 값이 read(2) 호출로부터 돌려주어진 에러의 1 개인지, 또는 다음의 1 개입니다.

[EBADF]
    iocb->aio_fildes 하지만 읽기에 대해서는 무효입니다.

[ECANCELED]
    요구는 aio_cancel() 의 호출에 의해 명시적으로 캔슬되었습니다.

[EINVAL]
    오프셋(offset) iocb->aio_offset (은)는 무효입니다.

표준
aio_read() 호출은 p1003.2 에 준거하고 있습니다.

역사
aio_read 하 FreeBSD 3.0 그리고 처음 등장했습니다.

저자
이 메뉴얼 페이지는 Terry Lambert <terry@whistle.com> 하지만 작성했습니다.

버그
iocb->aio_offset 의 값은 무시됩니다. iocb->_aiocb_private 안의 무효인 정보는 커널을 혼란시킬 가능성이 있습니다.