Today I found out that strace --fault=$syscall exists and allows you to inject faults (error returns) into syscalls without modifying the source program or building an awkward test harness (as I have been doing in my life so far).
Another tool for the belt, excellent