首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试错误条件- EINTR

单元测试错误条件- EINTR
EN

Stack Overflow用户
提问于 2008-10-06 22:47:10
回答 8查看 6.2K关注 0票数 7

简而言之,如何在系统调用中对错误条件(如EINTR )进行单元测试。

我正在处理的一个特别的例子,它本身可能是一个例子,就是当fclose用(errno==EINTR)返回EOF时,是否有必要再次调用它。行为取决于fclose的实现:

代码语言:javascript
复制
// Given an open FILE *fp
while (fclose(fp)==EOF && errno==EINTR) {
    errno = 0;
}

如果发生EINTR时释放fp,则此调用可能不安全。我如何测试错误处理的时间(errno==EINTR)?

EN

回答 8

Stack Overflow用户

发布于 2008-10-07 00:27:08

在这种情况下,再次调用fclose()是不安全的,因为C标准规定,即使调用失败,流也会与文件分离(并变得不确定)。

票数 4
EN

Stack Overflow用户

发布于 2008-10-07 00:21:03

使用函数指针的结构来抽象系统函数。将对flcose(fp)的调用替换为sys->fclose(fp)。在您的单元测试中,创建一个总是返回EINTR的fclose实现,然后将sys->fclose设置为该版本。

票数 3
EN

Stack Overflow用户

发布于 2008-10-07 00:38:04

查看linux内核源代码,我找不到任何在文件关闭时返回EINTR的驱动程序。

如果你必须重现这种情况,你可以在Linux中编写自己的驱动程序,在.release方法上返回-EINTR。看看O‘’Reilly的Linux设备驱动程序一书中的example code。scull项目是最简单的项目之一。您可以将其更改为如下形式:

代码语言:javascript
复制
int scull_release(struct inode *inode, struct file *filp)
{
    return -EINTR;
}

不过,再一次浏览linux源代码树,我找不到任何在关闭时返回EINTR的驱动程序。

编辑- ok它看起来像fuse -用户空间文件系统也许能够。它用于像sshfs这样的东西。不过,这仍然是一种边缘情况。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/176512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档