急求解答!Linux中异步IO的问题

发布于 2022-10-15 08:23:19 字数 357 浏览 21 评论 0

代码片段如下:
(首先通过io_setup分配了i个异步io的请求空间)
n1 = io_submit(pt_aio->ctx, i, pt_aio->iocbpp);//提交i个异步io请求
n2 = io_getevents(pt_aio->ctx, i, i, events, NULL);//等待被提交的io请求全部完成

其中i = 200, 其他参数也已经(我认为)成功赋值
但是返回值为 n1=54。
意思是不是说200个异步IO请求中有54个已经被成功提交?那剩下的146个呢?

但是奇怪的是n2=200, 为什么明明只成功提交了54个异步IO请求,却完成了200个呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等风也等你 2022-10-22 08:23:19

异步读操作,向内核发出读的命令,传入的参数是一个aiocb的结构,比如

  struct aiocb myaiocb;

  memset(&aiocb , 0x00 , sizeof(myaiocb));

  myaiocb.aio_fildes = fd;

  myaiocb.aio_buf = new char[1024];

  myaiocb.aio_nbytes = 1024;

  if (aio_read(&myaiocb) != 0)

  {

  printf("aio_read error:%sn" , strerror(errno));

  return false;

  }

  3. int aio_write(struct aiocb *aiocbp);

  异步写操作,向内核发出写的命令,传入的参数仍然是一个aiocb的结构,当文件描述符的O_APPEND

  标志位设置后,异步写操作总是将数据添加到文件末尾.如果没有设置,则添加到aio_offset指定的

  地方,比如:

  struct aiocb myaiocb;

  memset(&aiocb , 0x00 , sizeof(myaiocb));

  myaiocb.aio_fildes = fd;

  myaiocb.aio_buf = new char[1024];

  myaiocb.aio_nbytes = 1024;

  myaiocb.aio_offset = 0;

  if (aio_write(&myaiocb) != 0)

  {

  printf("aio_read error:%sn" , strerror(errno));

  return false;

  }

  4. int aio_error(const struct aiocb *aiocbp);

  如果该函数返回0,表示aiocbp指定的异步I/O操作请求完成.

  如果该函数返回EINPROGRESS,表示aiocbp指定的异步I/O操作请求正在处理中.

  如果该函数返回ECANCELED,表示aiocbp指定的异步I/O操作请求已经取消.

  如果该函数返回-1,表示发生错误,检查errno.

  5. ssize_t aio_return(struct aiocb *aiocbp);

  这个函数的返回值相当于同步I/O中,read/write的返回值.只有在aio_error调用后

  才能被调用.

  6. int aio_cancel(int fd, struct aiocb *aiocbp);

  取消在文件描述符fd上的aiocbp所指定的异步I/O请求

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文