2010-12-08 32 views
2

我需要在C中编写单元测试,以获得对文件句柄进行操作的函数。我想将测试文件的内容直接包含到单元测试源中。因此我的问题是:是否可以定义一个字符串并将其作为C中的文件句柄进行访问?访问字符串作为文件句柄在C

+0

查看Ryan的回答和我的评论。这些是POSIX的正确方法,并且可以在C1x中进行标准化。如果您需要支持非POSIX系统,那么您几乎不会运气。 – 2010-12-08 16:06:38

+0

POSIX会做得很好,非常感谢! – Leo 2010-12-08 16:08:59

回答

6

在linux上,请参阅fmemopenopen_memstream

#define _GNU_SOURCE 
#include <stdio.h> 

FILE *fmemopen(void *buf, size_t size, const char *mode); 

FILE *open_memstream(char ** ptr, size_t *sizeloc); 
0

如果你正在测试的只是阅读(而不是寻求或写作,或做fcntl和东西)或只写,那么很可能通过使用管道和分叉来实现这一点。我从来没有在Windows中这样做过,但我认为它应该是可能的,因为管道和叉子都是POSIX。

您需要首先创建一个管道,然后fork,然后开始将您的文本写入管道(从父节点到子节点,然后在子节点运行测试,但是我更喜欢写子节点) ,以及你传递给你的测试代码的管道的read-fd。孩子应该继续写作直到完成(可能需要多次写入)或管道关闭。如果你的代码正在写入,那么孩子应该阅读,直到管道关闭(可能不得不打电话读取多次),否则被测试的代码将阻止等待某人阅读,或死在一根破损的管道上。

HTH。