-
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/testby 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