我有一个使用 linux aio_write 和 aio_read 的测试实用程序。这个测试实用程序包装了我的静态库并对其进行测试。这个库是多线程的黑盒。
到目前为止,它运行良好。但是现在我们对这个黑盒做了很大的改变,这会导致测试实用程序在提交第一个 IO 时立即失败。此 IO 返回 errno 22 == EINVAL。
根据 aio_write 手册页,如果以下字段之一无效,则会发出此错误 --> aio_offset, aio_reqprio, aio_nbytes。我在 gdb 中运行它并测试它们的值,只要与struct aiocb *输入参数中的所有其他值一样。我的结论是输入的参数都是有效的。
我怀疑线程在黑盒内的工作方式发生了一些变化。这就是我怀疑导致此问题的原因(我找不到任何其他解释)。
我真正想了解的是:哪些情况会导致 aio_write() 返回 EINVAL 错误代码???
只是为了澄清一下,当我将黑盒替换为旧版本时,使用相同的测试实用程序它工作正常......(我还在这里测试了输入参数,因为它们与错误版本的输入参数匹配)。