在测试套件中通过写入/dev/full
. 有没有一种很好的技术来产生读取错误?我目前正在使用 LD_PRELOAD 来覆盖read
,但这似乎太复杂且不可移植(不是 /dev/full 是可移植的......)。
问问题
1698 次
4 回答
6
除了从目录中读取(如上一个答案中所述)之外,您还可以尝试读取/proc/self/mem
以获取错误(这应该让您EIO
在 Linux 上得到错误)。解释请见:https ://unix.stackexchange.com/a/6302
于 2012-07-06T12:59:14.807 回答
2
根据 (OS X) read(2) 联机帮助页,如果“[a]n 尝试读取目录”,read(2) 将生成错误。因此,您可以打开(2) 一个目录(确保 prot 不允许写入,否则会引发错误),然后尝试从中读取。这看起来像是在“正常”情况下可能发生的唯一错误(即没有做诸如故意破坏 FILE* 结构之类的事情)。
我假设您在谈论 C 或类似语言中的 read(2) 错误,但即使在高级语言中,您也可以打开一个目录并尝试从中读取(尽管我只是尝试过)用Python,太聪明了,不让你打开目录……)
于 2012-06-27T23:59:54.087 回答
1
您也可以将非法指针作为要读取的缓冲区传递,这将返回-EFAULT。就像是 :
read(fd, (char *)0, cout);
谢谢铃木
于 2012-06-28T02:44:13.777 回答