-
Vytvořte soubor požadované velikosti (zde 10 MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
-
Vytvořte z tohoto souboru zařízení zpětné smyčky
losetup -f /home/qdii/test
-
Naformátujte toto zařízení v požadovaném systému souborů
mkfs.ext4 /dev/loopXXX
-
Připevněte jej, kamkoli chcete (
/mnt/test
by měl existovat)sudo mount /dev/loopXXX /mnt/test
-
Zkopírujte svůj program na tento oddíl a otestujte
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Nahraďte /dev/loopXXX
se smyčkovým zařízením losetup
vytvořen, zjistěte pomocí losetup -a
.
Až budete hotovi, nezapomeňte:
- odpojte pomocí
sudo umount /mnt/test
. - vyčistěte smyčková zařízení po použití pomocí
losetup -D /dev/loopXXX
- odeberte soubor.
Další možností by bylo snížit příslušný limit pomocí setrlimit(2) syscall s RLIMIT_FSIZE
nebo pomocí bash
ulimit vestavěný (pomocí -f
). Pak by zápis(2) selhal s EFBIG
A můžete také nastavit nějaké kvóty pro nějaký vhodný souborový systém, takže write(2)
selže s EDQOT
.
Pokud chcete skutečný ENOSPC
chyba na write(2)
pravděpodobně potřebujete souborový systém zpětné smyčky, jak odpověděl qdii.
BTW, opravdu nevím, jak "emulovat" EIO
chyba (možná s nějakým souborovým systémem FUSE?).
Mnoho programů zpracovává write(2)
chyby (a téměř všechny by měly). Ale neznám mnoho programů, které by velmi odlišně zpracovávaly různé chyby možné s write(2)
. Většina programů zvládá všech write(2)
chyby stejným způsobem.
Stačí použít /dev/full, při pokusu o zápis do něj vyvolá chybu ENOSPC:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device