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?
Was meinst du mit "hat nicht funktioniert"? Bitte genau darüber, was schief gelaufen ist. – rgettman
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? –
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 –