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