AIO_WRITE(2)

명칭
aio_write - 파일에의 비동기 기록 (REALTIME)

프로그램 라이브러리
libc

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

해설
aio_write() 함수에 의해, 호출원프로세스는 iocb->aio_buf 하지만 가리키는 버퍼로부터 기술자 iocb->aio_fildes 에 iocb->aio_nbytes (을)를 기입할 수 있습니다. 기록 요구가 기술자에게로의 기다리는 행렬에 넣어져 버리면(자) 즉시 호출은 돌아옵니다. 호출이 돌아온 시점에서 기록은 완료하고 있을 가능성도 완료하고 있지 않다 가능성도 있습니다. 무효인 인수이기 때문에 등에 의해 요구를 기다리는 행렬에 넣어지지 않는 경우는, 호출은 요구를 기다리는 행렬에 넣지 않고 돌아옵니다.

iocb->aio_fildes 용으로 O_APPEND 하지만 설정되어 있는 경우, aio_write() 조작은 호출이 행해진 것과 같은 순서로 파일의 말미에 추가됩니다. O_APPEND 하지만 파일 기술자용으로 설정되어 있지 않은 경우, 기록 조작은 파일의 선두에 iocb->aio_offset (을)를 더한 절대 위치에서 행해집니다.

_POSIX_PRIORITIZED_IO 하지만 정의되고 있어 한편 기술자가 그것을 서포트하고 있는 경우, 기다리는 행렬에 넣어진 조작은 호출해 프로세스의 우선 순위로부터 iocb->aio_reqprio (을)를 감산했는데 동일한 우선 순위로 됩니다.

iocb 포인터는 기다리는 행렬에 넣어진 조작의 반환값, 또는 에러 상태를 판정하기 위해서, aio_return() 및 aio_error() 에의 인수로서 사용할 수 있습니다.

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

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

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

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

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

반환값

에러
aio_write() 함수는 다음의 경우에 처리를 실패합니다:

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

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

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

[EBADF]
    iocb->aio_fildes 하지만 무효인지, 기록에는 열리고 있지 않습니다.

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

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

[EBADF]
    iocb->aio_fildes (은)는 기록에 대해서는 무효입니다.

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

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

표준
aio_write() 하 p1003.2 표준에 준거하고 있습니다.

역사
aio_write 함수는 FreeBSD 3.0 그리고 처음 등장했습니다.

저자
이 메뉴얼 페이지는 Wes Peters <wes@softweyr.com> 하지만 작성했습니다.

버그
비동기 입출력 조작은 이 버젼에서는 캔슬할 수 없습니다. iocb->_aiocb_private 안이 잘못한 정보는 커널을 혼란시킬 가능성이 있습니다.