-
Créez un fichier de la taille que vous souhaitez (ici 10Mo)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
-
Créez un périphérique de bouclage à partir de ce fichier
losetup -f /home/qdii/test
-
Formatez ce périphérique dans le système de fichiers de votre choix
mkfs.ext4 /dev/loopXXX
-
Montez-le où vous voulez (
/mnt/test
devrait exister)sudo mount /dev/loopXXX /mnt/test
-
Copiez votre programme sur cette partition et testez
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Remplacez /dev/loopXXX
avec le dispositif boucle losetup
créé, découvrez avec losetup -a
.
Lorsque vous avez terminé, n'oubliez pas :
- démonter avec
sudo umount /mnt/test
. - nettoyez les dispositifs de boucle après utilisation, avec
losetup -D /dev/loopXXX
- supprimez le fichier.
Une autre possibilité serait de réduire la limite appropriée avec setrlimit(2) syscall avec RLIMIT_FSIZE
ou avec le bash
ulimit intégré (utilisant -f
). Alors write(2) échouerait avec EFBIG
Et vous pouvez également définir des quotas sur un système de fichiers approprié, donc write(2)
échoue avec EDQOT
.
Si vous voulez le vrai ENOSPC
erreur à write(2)
vous avez probablement besoin d'un système de fichiers loopback comme répondu par qdii.
BTW, je ne sais pas vraiment comment "émuler" le EIO
erreur (peut-être avec un système de fichiers FUSE ?).
De nombreux programmes gèrent write(2)
erreurs (et presque tous devraient). Mais je ne connais pas beaucoup de programmes qui gèrent très différemment les différentes erreurs possibles avec write(2)
. La plupart des programmes gèrent tous les write(2)
erreurs de la même manière.
Utilisez simplement /dev/full, cela déclenchera l'erreur ENOSPC lorsque vous essayez d'y écrire :
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device