2017-12-12 31 views
0

LinuxでPOSIX非同期IO APIを使用してファイルコピープログラムを実装しようとしています。非同期IOの進捗状況を表示することが可能です

私はこの試みた:私は

を実行するたびにaio_read aio_writeと機能の進行状況を表示することは可能です異なる結果を与える

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; 
} 

しかし、カウンターの?

+1

「うまくいかない」とはどういう意味ですか?何がうまくいかなかったのか具体的 – rgettman

+0

基本的なデバッグ手法では、 'aio_error()'によって返された値をキャプチャして出力することが推奨されるので、ループが終了する理由を知ることができます。おそらくEINPROGRESSは返されませんが、何が返されますか?おそらく、I/Oは完了しているでしょうか? –

+0

私は進歩を学ぶためにEINPROGRESSを使用しました。 I/Oが完了すれば、明らかに進捗は%100です:)しかし、このコードは実行するたびに異なる結果を返します。 @JonathanLeffler –

答えて

0

異なる実行にはそれぞれ異なる実行コンテキストがあるため、異なる結果が得られます(あなたの家から銀行に行くためには常に同じパスを使用しますか?銀行は常に正確に同じですか?最後に同じタスク - あなたは銀行にいる、異なる実行)。あなたのプログラムが測定しようとするのは、I/O完了ではなく、いくつかの非同期I/Oの完了をテストする時間です。

いいえ、指定された非同期I/Oの完了率の概念はありません。