急求解答!Linux中异步IO的问题
代码片段如下:
(首先通过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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
异步读操作,向内核发出读的命令,传入的参数是一个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请求