-
Erstellen Sie eine Datei in der gewünschten Größe (hier 10 MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
-
Machen Sie aus dieser Datei ein Loopback-Gerät
losetup -f /home/qdii/test
-
Formatieren Sie dieses Gerät im gewünschten Dateisystem
mkfs.ext4 /dev/loopXXX
-
Montieren Sie es, wo immer Sie möchten (
/mnt/test
sollte vorhanden sein)sudo mount /dev/loopXXX /mnt/test
-
Kopieren Sie Ihr Programm auf diese Partition und testen Sie
cp /path/my/program /mnt/test && cd /mnt/test && ./program
Ersetzen Sie /dev/loopXXX
mit dem Loop-Gerät losetup
erstellt, finden Sie es mit losetup -a
heraus .
Wenn Sie fertig sind, vergessen Sie nicht:
- unmounten mit
sudo umount /mnt/test
. - Schleifengeräte nach Gebrauch aufräumen, mit
losetup -D /dev/loopXXX
- Entfernen Sie die Datei.
Eine andere Möglichkeit wäre, das entsprechende Limit mit setrlimit(2) syscall mit RLIMIT_FSIZE
zu reduzieren oder mit dem bash
ulimit eingebaut (unter Verwendung von -f
). Dann würde write(2) mit EFBIG
fehlschlagen
Und Sie könnten auch einige Kontingente für ein geeignetes Dateisystem festlegen, also write(2)
schlägt mit EDQOT
fehl .
Wenn Sie den echten ENOSPC
wollen Fehler zu write(2)
Sie benötigen wahrscheinlich ein Loopback-Dateisystem, wie von qdii beantwortet.
Übrigens, ich weiß nicht wirklich, wie ich den EIO
"emulieren" soll Fehler (vielleicht mit einem FUSE-Dateisystem?).
Viele Programme verarbeiten write(2)
Fehler (und fast alle sollten). Aber ich kenne nicht viele Programme, die sehr unterschiedlich mit den verschiedenen Fehlern umgehen, die mit write(2)
möglich sind . Die meisten Programme verarbeiten alle write(2)
Fehler auf die gleiche Weise.
Verwenden Sie einfach /dev/full, es wird den ENOSPC-Fehler auslösen, wenn Sie versuchen, darauf zu schreiben:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device