gpt4 book ai didi

c++ - Linux 系统调用 aio_write() 失败,错误代码为 22 (EINVAL)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:04 28 4
gpt4 key购买 nike

我有一个使用 linux aio_write 和 aio_read 的测试实用程序。此测试实用程序包装我的静态库并对其进行测试。这个库是多线程黑盒。

到目前为止,它运行良好。但是现在我们对这个黑盒进行了重大更改,这会导致测试实用程序在提交第一个 IO 后立即失败。此 IO 返回错误号 22 == EINVAL。

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

我怀疑线程在黑盒中的工作方式发生了变化。这就是我怀疑导致此问题的原因(我找不到任何其他解释)。

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

澄清一下,当我将黑盒替换为旧版本时,使用相同的测试实用程序它工作正常....(我还在这里测试了输入参数,因为它们与错误版本的输入参数匹配).

最佳答案

你可以在linux-kernel-source/fs/aio.c文件夹下查看linux源代码中的aio实现

遗憾的是,有很多地方返回了 -EINVAL。正如@myaut 在他的评论中提到的,我建议您使用 strace。另一种解决方案是修改代码,编译它并检查它在哪里失败。

关于c++ - Linux 系统调用 aio_write() 失败,错误代码为 22 (EINVAL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com