* cache /dev/null after opening * make opening /dev/null cancelable * avoid unreachable even when OS does something unexpected
and split out tests into a separate file