-
Cree un archivo del tamaño que desee (aquí 10 MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
-
Cree un dispositivo de bucle invertido a partir de este archivo
losetup -f /home/qdii/test
-
Formatee ese dispositivo en el sistema de archivos que desee
mkfs.ext4 /dev/loopXXX
-
Móntalo donde quieras (
/mnt/test
debería existir)sudo mount /dev/loopXXX /mnt/test
-
Copia tu programa en esa partición y prueba
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Sustituir /dev/loopXXX
con el dispositivo de bucle losetup
creado, descúbrelo con losetup -a
.
Cuando haya terminado, no olvide:
- desmontar con
sudo umount /mnt/test
. - limpie los dispositivos de bucle después de usarlos, con
losetup -D /dev/loopXXX
- eliminar el archivo.
Otra posibilidad sería reducir el límite apropiado con setrlimit(2) syscall con RLIMIT_FSIZE
o con el bash
incorporado ulimit (usando -f
). Entonces write(2) fallaría con EFBIG
Y también podría establecer algunas cuotas en algún sistema de archivos apropiado, por lo que write(2)
falla con EDQOT
.
Si quieres el verdadero ENOSPC
error a write(2)
probablemente necesite un sistema de archivos de bucle invertido como responde qdii.
Por cierto, realmente no sé cómo "emular" el EIO
error (¿tal vez con algún sistema de archivos FUSE?).
Muchos programas manejan write(2)
errores (y casi todos deberían). Pero no conozco muchos programas que manejen de manera muy diferente los diversos errores posibles con write(2)
. La mayoría de los programas manejan todos los write(2)
errores de la misma manera.
Simplemente use /dev/full, generará el error ENOSPC cuando intente escribir en él:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device