强制 write(2) 返回 0

强制 write(2) 返回 0

我正在编写单元测试,并且想测试一些代码对 write(2) 调用返回零的情况的处理。与以往一样,最好保持测试尽可能真实。

我可以使用任何类型的文件描述符来实现此目的,只要它在调用 write(2) 时返回零即可。我还可以传入几乎任何大小的任何数据来写入。

但是,我希望能够在多次返回零后从另一个线程更改描述符的行为,因此仅写入长度为零的数据是不可接受的。

谁能想到一种合理可移植、可靠的方法来使文件描述符进入这种状态?如果可能的话,目标是最新的 Linux,但可以更广泛地工作(*BSD、OS X 等),那就太好了。

答案1

如果影响实际输入很困难(例如对光盘错误做出反应),则应该在函数周围制作一个薄包装器,这取决于某些全局状态。在这种情况下,我会放置这样一个包装器write()以返回 0 或来自 的实际返回write()

如果包装器的开销太大,则可以使用一些包装器来完全省略生产系统中的包装器代码,但至少您可以通过根据需要设置全局状态来#define测试顶部的层,以便在单元测试期间做出正确的反应。write()

相关内容