c - 是否可以显示异步IO的进度

标签 c asynchronous io posix

我正在尝试在Linux中使用POSIX异步IO API实现文件复制程序。

我尝试过这个:

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函数的进度?

最佳答案

您会得到不同的结果,因为每个不同的执行都有自己的执行上下文,可能与其他执行不同(您是否总是遵循完全相同的路径从家到银行?即使是,到达银行所用的时间总是完全相同?最后的任务相同 - 你在银行,不同的执行)。您的程序尝试测量的不是 I/O 完成情况,而是它测试某些异步 I/O 完成情况的时间数量。

不,不存在给定异步 I/O 的完成百分比概念。

关于c - 是否可以显示异步IO的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47779943/

相关文章:

c - 在 C 中规范化二维数组时值不正确

javascript - 如何按照请求的顺序将异步响应推送到数组中?

python - Celery 后台任务出现 "Working outside of request context"错误

windows - 如何在 Windows XP 中写入 I/O 端口? (德尔福7)

perl:我可以等 15 分钟,然后如果没有按下某个键,做点什么吗?

c - 在 C 中从 stdin 读取写入到 stdout

c - CodeBlock 中的结构大小错误

c - 为什么在单个变量上使用指针

c - 在 Win32 中等待串口传输完成

c++ - 如何使用 libev 在 C++ 中创建异步方法