我有一段代码试图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实现,同时拒绝其他人。 但是,如果实际需要,我只会这样做。