我有一段代码尝试mmap
某个文件。如果它可以mmap文件,它会做一些事情,如果它不能mmap它做其他事情。
代码在两种情况下都有效,但我想在一些不支持mmap的文件系统中进行一些测试。问题是我找不到任何无法mmap的文件系统。
有人能指出一些不是mmap的文件系统吗?
答案 0 :(得分:4)
您可以使用库插入来模拟不支持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
环境变量中命名该库的路径,它应优先于 real mmap,从而模拟mmap始终失败的系统。这样,您可以在没有超级用户权限的情况下测试代码,无需创建特定的文件系统,也无需使用相应的内核模块,用户空间工具等。
理论上,您可能会遇到一些情况,即您控制之外的某些库依赖于特定类型的mmap来始终工作。具有MAP_ANONYMOUS
的映射是一个主要示例,因为它不受文件系统支持,因此不依赖于FS类型。如果由于违反mmap假设而导致库中的任何问题失败,则可能必须修改插入器以仔细查看其参数并将一些调用转发给libc实现,同时拒绝其他人本身。但是,如果真的需要,我只会这样做。