用不能映射的文件系统testing我的软件

我有一段代码试图mmap一些文件。 如果它可以映射文件,它会做一些事情,如果它不能mmap它做了别的事情。

代码在这两种情况下都能正常工作,但是我想在一些不支持mmap的文件系统中做一些testing。 问题是,我没有find任何文件系统,无法mmap。

有人可以指出我不是可映射的文件系统吗?

您可以使用库插入来模拟不具有mmap功能的系统。 只需要这个C文件

 #include <errno.h> #include <sys/mman.h> void* mmap(void*, size_t, int, int, int, off_t) { errno = ENODEV; return NULL; } 

并将其编译到共享库。 在LD_PRELOAD环境变量中命名该库的路径,它应该优先于真实的 mmap,从而模拟mmap总是失败的系统。 这样,您就可以在没有超级用户权限的情况下测试您的代码,而无需创建特定的文件系统,也无需拥有相应的内核模块,userland工具等。

理论上,您可能会遇到以下情况:您的控制之外的某些库依赖特定类型的mmap来始终工作。 MAP_ANONYMOUS的地图是一个很好的例子,因为它没有被文件系统支持,因此不依赖于FS类型。 如果由于违反了mmap的假设而遇到库中的任何问题,则可能需要修改内插器以仔细查看其参数,并将一些调用转发给libc实现,同时拒绝其他人。 但是,如果实际需要,我只会这样做。