首页 > 解决方案 > 如何测试程序是否正确处理部分读取()和写入()?

问题描述

众所周知,readwrite系统调用可以在比请求更少的字节上运行。但这种情况比较少见,而且通常没有经过很好的测试。考虑这个有缺陷的 C 程序:

#include <unistd.h>

int main(void) {
    const char *buf = "Hello, World!\n";
    size_t count = 14;
    do {
        ssize_t written = write(STDOUT_FILENO, buf, count);
        if(written < 0) return 1;
        /* whoops, forgot to do `buf += written;`! */
        count -= written;
    } while(count);
    return 0;
}

由于它忘记调整buf,如果第一个write只写 7 个字符,它最终会打印Hello, Hello, 而不是Hello, World!. 不过,在正常测试中你真的不太可能发现这个错误,因为它几乎总是会在一次调用中写入所有 14 个字符。有什么方法可以让我在测试时允许reads 和writes 进行部分写入,以便更容易找到这些类型的错误?一些不错的选择:

标签: testingposixsystem-callspartial

解决方案


推荐阅读