Windows 10下如何正确使用或指向空设备,避免写入内容被读回
Windows 10 下正确使用空设备适配原生OpenSSH的方案
踩坑的核心原因
Windows 的空设备 NUL 特殊判定逻辑,仅存在于cmd、PowerShell这类命令行壳层的流重定向规则中。
原生OpenSSH属于直接调用Win32标准文件读写API的程序,完全绕过壳层的路径解析流程,会把传入的nul、NUL字符串直接当成当前工作目录下的普通文件名处理——这就是为什么传裸nul路径会意外生成实体文件、甚至能正常读写文件内容的根本原因。
之前尝试的各类写法为什么全部失败:
- 传入
null、NULL:Windows 从未将这个字符串定义为空设备的保留名,自然会被当成普通文件路径 - 传入
\Device\Null、/Device/Null:这是面向内核态组件的设备路径格式,普通用户态程序没有直接访问权限,必然报找不到文件的错误
正确可用的写法
要让用户态程序直接识别系统空设备,必须加上Win32设备命名空间的前缀,完整的空设备路径为:\\.\NUL
对应OpenSSH的命令写法:ssh -o UserKnownHostsFile=\\.\NUL user@host
所有写入这个路径的内容会被系统直接丢弃,不会在磁盘上生成任何实体文件,也无法读回之前写入的内容,行为和Linux下的/dev/null完全一致。
已生成实体nul文件的清理方法
如果已经在目录下生成了资源管理器无法删除的nul实体文件,在命令行执行以下命令即可删除:del \\.\nul
说明:带
\\.\前缀的设备路径写法,对所有直接调用Win32文件API的用户态程序都生效,不局限于OpenSSH使用场景。
内容的提问来源于stack exchange,提问作者s-m-e
相关产品推荐
相关产品推荐

