tail head cat sleep
QR code linking to this page

Man page  — AIO_READ

명칭

aio_read – 파일로부터의 비동기 읽기 (REALTIME)

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <time.h>
#include <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_opcodeaio_read() 호출에 의해 무시됩니다.

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

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

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

제한

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

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

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

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

반환값

The aio_read function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

진단

없음.

에러

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() 호출은 IEEE Std 1003.2 ("POSIX.2") 에 준거하고 있습니다.

역사

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

저자

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

버그

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

AIO_READ (2) November 17, 1998

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다.

Unix’s “power tools” are more like power switchblades that slice off the operator’s fingers quickly and efficiently.
— The Unix Haters' handbook