Tengo un fragmento de código que intenta mmap algún archivo. Si puede mmmap el archivo, hace algo, si no puede mmap hace otra cosa.
El código funciona en ambos casos, pero quería hacer algunas pruebas en algún sistema de archivos que no admita mmap. El problema es que no encontré ningún sistema de archivos que no pudiera mmap.
¿Puede alguien señalarme algún sistema de archivos que no sea compatible con mmap?
Puede simular un sistema no compatible con mmap mediante la interposición de bibliotecas. Simplemente tome este archivo C
#include <errno.h> #include <sys/mman.h> void* mmap(void*, size_t, int, int, int, off_t) { errno = ENODEV; return NULL; } y compilarlo en una biblioteca compartida. Nombre la ruta de esa biblioteca en la variable de entorno LD_PRELOAD , y debería tener prioridad sobre el mmap real , simulando así un sistema donde mmap siempre fallará. De esa manera, puede probar su código sin privilegios de superusuario, sin crear ciertos sistemas de archivos y sin tener que tener disponibles los módulos del kernel correspondientes, herramientas de usuario y similares.
En teoría, podría encontrar situaciones en las que alguna biblioteca fuera de su control dependa de tipos específicos de mmap para funcionar siempre. Un mapa con MAP_ANONYMOUS es un excelente ejemplo, ya que no está respaldado por un sistema de archivos y, por lo tanto, no depende de los tipos de FS. Si encuentra algún problema en las bibliotecas que fallan debido a la violación de las suposiciones de mmap, es posible que deba modificar el intercalador para observar más de cerca sus argumentos y reenviar algunas llamadas a la implementación de libc mientras rechaza otras. Pero solo haría esto si realmente surge la necesidad.