gpt4 book ai didi

可以通过编程方式中断系统调用吗?

转载 作者:行者123 更新时间:2023-11-30 14:45:20 24 4
gpt4 key购买 nike

我正在尝试为我的 ZeroMQ 应用程序编写单元测试(我通过 cppzmq C++ 层使用它)。我的问题是,当我尝试关闭上下文时,有时(看似随机)会失败。我不知 Prop 体原因,只是错误代码设置为 EINTR,表示系统调用中断。

要为这种行为编写一个(失败的)单元测试(然后我可以尝试修复),我在想( see also this PR )如果我能以某种方式欺骗这些被中断的系统调用,那将会很有用。在这个欺骗性的系统调用中,我可以首先调用常规系统调用,但在返回之前手动将错误代码设置为 EINTR。例如,我想替换 recv像这样的东西:

ssize_t recv(int sockfd, void *buf, size_t len, int flags) {
ssize_t result = ::recv(sockfd, buf, len, flags);
errno = EINTR;
return result;
}

这可能吗?这是明智的吗(我会遇到问题吗?如果是的话,会出现哪些问题)?还有其他方法可以解决我的单元测试问题吗?

最佳答案

EINTR 每当在阻塞系统调用期间接收到正确配置的中断时就会返回。

可能最容易引发的信号是 SIGALRM,只需调用即可调度:

alarm(1);
recv(...);

一秒钟后您将收到 SIGALRM

如果您不想等待 1 秒,可以使用 setitimer() 获得亚秒级精度。

关于可以通过编程方式中断系统调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119771/

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