欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在Linux中遇到aio_write调用失败,错误代码22 (EINVAL): 问题解析与解决办法

最编程 2024-07-24 12:46:56
...

我有一个使用linux、aio_write和aio_read的测试实用程序。这个测试实用工具封装了我的静态库并测试它。这个库是多线程黑匣子。

到现在为止,一切都很顺利。但是现在我们对这个黑匣子做了很大的修改,这会导致测试实用程序在提交第一个IO时立即失败。此IO返回errno 22 == EINVAL。

基于aio_write手册页,如果下列字段之一无效-> aio_offset、aio_reqprio、aio_nbytes,则会发出此错误。我在gdb中运行它,并测试它们的值,只要使用struct * run参数中的所有其他值即可。我的结论是输入参数都是有效的。

我怀疑在黑匣子里线程的工作方式发生了变化。这就是我怀疑引起这个问题的原因(我找不到任何其他解释)。

我真正想要理解的是:哪些场景会导致aio_write()返回EINVAL错误代码?

为了澄清,当我将黑匣子替换为旧版本时,使用相同的测试实用程序可以很好地工作.(我还在这里测试了输入参数,因为它们与错误的版本输入参数匹配)。