我有一个代码,该代码试图 mmap
一些文件。如果它可以mmap文件,则可以执行某些操作,如果无法mmap,它会做其他事情。
该代码在两种情况下都可以使用,但是我想在某些不支持MMAP的文件系统中进行一些测试。问题是我找不到任何无法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
环境变量中命名该库的路径,并且应该优先于 real mmap,从而模拟MMAP始终失败的系统。这样,您可以在无需超级用户特权的情况下测试代码,而无需创建某些文件系统,而无需具有相应的内核模块,Userland工具等。
从理论上讲,您可能会遇到控制外部的某些库依赖于特定类型的MMAP来始终工作的情况。带有MAP_ANONYMOUS
的地图是一个很好的示例,因为它不受文件系统的支持,因此不取决于FS类型。如果您在由于违反MMAP假设而遇到的库中遇到任何问题,则可能必须修改插入器以仔细查看其论点,并在拒绝其他人本身的同时将一些呼叫转发到LIBC实施中。但是,只有在需要真正出现的情况下,我才这样做。