2017-12-12 33 views
0

Linux에서 POSIX 비동기 IO API로 파일 복사 프로그램을 구현하려고합니다. 비동기 IO의 진행 상황을 표시 할 수 있습니까?

나는이 시도 :

main() { 
    char data[200]; 
    int fd = open("data.txt", O_RDONLY); // text file on the disk 
    struct aiocb aio; 

    aio.aio_fildes = fd; 
    aio.aio_buf = data; 
    aio.aio_nbytes = sizeof(data); 
    aio.aio_offset = 0; 

    memset(&aio, 0, sizeof(struct aiocb)); 
    aio_read(arg->aio_p); 
    int counter = 0; 
    while (aio_error(arg->aio_p) == EINPROGRESS) { 
      printf("counter: %d\n", counter++); 
    } 

    int ret = aio_return(&aio); 
    printf("ret value %d \n",ret); 

    return 0; 
} 

그러나 카운터 나는 그것이 aio_read 및 aio_write 기능의 진행 상황을 표시 할 수

를 실행할 때 다른 결과를 모든 시간을주고?를

+1

"작동하지 않았다"는 것은 무엇을 의미합니까? 무엇이 잘못되었는지 구체적으로 설명하십시오. – rgettman

+0

기본적인 디버깅 기술은'aio_error()'에 의해 반환 된 값을 캡쳐하고 출력 할 것을 제안하므로 루프가 끝나는 이유를 알 수 있습니다. 아마도 EINPROGRESS를 반환하지 않지만 반환되는 것은 무엇입니까? 아마도 I/O가 완료되었을 것입니까? –

+0

진도를 배우려고하기 때문에 EINPROGRESS를 사용했습니다. I/O가 완료되면 분명히 진행률은 % 100입니다. :) 그러나이 코드는 실행할 때마다 다른 결과를 반환합니다. @JonathanLeffler –

답변

0

다른 실행마다 다른 실행 문맥과 다를 수 있으므로 다른 결과가 있습니다 (집에서 은행으로 이동하기 위해 항상 동일한 경로를 따르십니까? 예라고해도 경과 시간이 은행은 항상 똑같은가? 결국 같은 임무 - 은행에있다, 다른 처형). 프로그램이 측정하려고하는 것은 I/O 완료가 아니라 일부 비동기 I/O의 완료를 테스트하는 시간입니다.

아니요, 주어진 async-I/O의 완료 비율에 대한 개념이 없습니다.