-
Notifications
You must be signed in to change notification settings - Fork 7
aio_suspend(3)
aio_suspend - 비동기 I/O 동작 또는 타임아웃 기다리기
#include <aio.h>
int aio_suspend(const struct aiocb * const aiocb_list[],
int nitems, const struct timespec *timeout);-lrt로 링크.
aio_suspend() 함수는 다음 중 한 경우가 발생할 때까지 호출 스레드를 중지한다.
-
목록
aiocb_list의 비동기 I/O 요청이 하나 이상 완료되었다. -
시그널이 전달된다.
-
timeout이 NULL이 아니고 거기 지정한 시간이 지났다. (timespec구조체에 대한 자세한 내용은 nanosleep(2) 참고.)
nitems 인자는 aiocb_list 내 항목 개수를 나타낸다. aiocb_list가 가리키는 목록의 각 항목은 NULL이거나 (그러면 무시함) aio_read(3), aio_write(3), lio_listio(3)로 개시한 I/O의 제어 블록에 대한 포인터여야 한다. (aiocb 구조체에 대한 설명은 aio(7) 참고.)
CLOCK_MONOTONIC이 지원되면 그 클럭을 타임아웃 시간 측정에 사용한다. (clock_gettime(3) 참고.)
aiocb_list에 지정한 I/O 요청들 중 하나가 완료된 후 이 함수가 반환하는 경우에는 0을 반환한다. 아니면 -1을 반환하며 오류를 나타내도록 errno를 설정한다.
EAGAIN- 지정한 동작 하나라도 완료되기 전에 호출이 타임아웃 되었다.
EINTR- 시그널로 호출이 끝났다. (기다리던 동작들 중 하나의 완료 알림일 수도 있다.) signal(7) 참고.
ENOSYS-
aio_suspend()가 구현돼 있지 않다.
glibc 2.1부터 aio_suspend() 함수가 사용 가능하다.
이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.
| 인터페이스 | 속성 | 값 |
|---|---|---|
aio_suspend() |
스레드 안전성 | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
NULL 아닌 timeout에 시간을 0으로 지정하면 폴링이 가능하다.
aio_suspend() 호출 시점에 aiocb_list에 지정한 비동기 I/O 동작이 하나 이상 이미 완료되어 있었던 경우에는 호출이 즉시 반환한다.
aio_suspend()가 성공적으로 반환한 다음에 어느 I/O 동작이 완료됐는지 알려면 aiocb_list가 가리키는 aiocb 구조체 목록을 aio_error(3)로 탐색하면 된다.
glibc의 aio_suspend() 구현은 비동기 시그널 안전이 아니며, 이는 POSIX.1의 요구 사항 위반이다.
aio_cancel(3), aio_error(3), aio_fsync(3), aio_read(3), aio_return(3), aio_write(3), lio_listio(3), aio(7), time(7)
2017-09-15