2017-12-12 10 views
0

Ich versuche, Dateikopierprogramm mit POSIX Asynchronous IO APIs in Linux zu implementieren.Ist es möglich, den Fortschritt von Asynchronous IO anzuzeigen

Ich versuchte dies:

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

Aber Zähler jedes Mal unterschiedliche Ergebnisse geben, wenn ich

laufen Ist es möglich, die Fortschritte von aio_read und aio_write Funktionen angezeigt werden?

+1

Was meinst du mit "hat nicht funktioniert"? Bitte genau darüber, was schief gelaufen ist. – rgettman

+0

Grundlegende Debugging-Techniken schlagen vor, das von 'aio_error() 'zurückgegebene vale zu erfassen und auszudrucken, damit Sie wissen, warum Ihre Schleife endet. Es gibt vermutlich EINPROGRESS nicht zurück, aber was bringt es zurück? Vielleicht ist die I/O abgeschlossen? –

+0

Ich habe EINPROGRESS benutzt, weil ich versuche, Fortschritte zu lernen. Wenn I/O abgeschlossen ist, ist der Fortschritt natürlich% 100 :) Aber dieser Code gibt jedes Mal, wenn ich laufe, unterschiedliche Ergebnisse zurück. @ JonathanLeffler –

Antwort

0

Sie haben unterschiedliche Ergebnisse, da jede unterschiedliche Ausführung ihren eigenen Ausführungskontext hat, der sich von anderen unterscheiden kann. Folgen Sie immer genau dem gleichen Weg von Ihrem Haus zur Bank? Selbst wenn ja, verstrichene Zeit Bank immer genau gleich? Gleiche Aufgabe am Ende - du bist in der Bank, verschiedene Ausführungen. Was Ihr Programm zu messen versucht, ist nicht die I/O-Vervollständigung, sondern die Anzahl der Zeit, die es für die Vervollständigung einiger Async-I/O testet.

Und nein, es gibt kein Konzept des Prozentsatzes der Fertigstellung eines bestimmten Async-I/O.

Verwandte Themen