生成读取错误

时间:2012-06-27 14:28:43

标签: unix testing

通过写入/dev/full在测试套件中生成写入错误很简单。是否有一种很好的技术来产生读错误?我目前正在使用LD_PRELOAD覆盖read但这看起来太复杂且不可移植(不是/ dev / full是可移植的......)。

4 个答案:

答案 0 :(得分:5)

除了从目录中读取(如上一个答案中所述),您可以尝试阅读/proc/self/mem以获取错误(这应该会让您在Linux上获得EIO)。有关说明,请参阅:https://unix.stackexchange.com/a/6302

答案 1 :(得分:4)

适用于所有主要unices的方法是实现一个小的FUSE文件系统。当用户空间文件系统驱动程序出错时,EIO是默认的错误代码,因此很容易实现。 PerlPython绑定都带有开始的示例,您可以快速编写一个主要镜像现有文件但在精心挑选的位置注入EIO的文件系统。

现有这样的文件系统:petardfsarticle),我不知道它开箱即用的效果如何。

答案 2 :(得分:2)

根据(OS X)read(2)联机帮助页,如果“[a] n尝试读取目录”,则read(2)将生成错误。因此,你可以打开(2)一个目录(确保prot不允许写入,或者这会抛出错误),然后尝试从中读取。这看起来像是在那里列出的唯一可能在“正常”情况下发生的错误(即没有像故意破坏FILE *结构那样)。

我假设你在谈论C中的read(2)错误或类似的错误,但即使是在更高级别的语言中,你也可以打开一个目录并尝试从中读取(尽管我刚用Python试了一下,让你打开目录太聪明了......)

答案 3 :(得分:1)

您还可以将非法指针作为缓冲区传递给读取,这将返回-EFAULT。 类似的东西:

read(fd, (char *)0, cout);

由于 铃木