面向Linux的应用应将超出内存的临时文件存储在何处?
面向Linux的大体积临时文件存储方案
现有可行路径
- 优先用
$TMPDIR环境变量:不少系统会针对大临时文件配置磁盘挂载的临时目录,用户或管理员可能已经把这个变量指向了磁盘分区。你的程序应该先检查这个变量是否存在且可写,存在的话就用它存大临时文件。 - 备选选
/var/tmp:这是Linux里传统的磁盘级临时文件目录,和/tmp不同,它的内容不会随系统重启自动清空,而且几乎所有发行版都会把它挂在磁盘分区上,刚好适合存体积大的临时数据。 - 别用
$XDG_CACHE_HOME:这个目录是给应用缓存用的,属于用户级的持久化缓存空间,不是临时文件的标准存储位。把大临时文件塞这儿会占用用户的缓存配额,不符合XDG规范的设计初衷。
适配建议
- 先查可用空间:创建大文件前,先检测目标目录的剩余磁盘空间,避免因为空间不够搞崩程序,用
statvfs()这类系统调用就能拿到空间信息。 - 给用户留配置项:允许用户通过配置文件或者命令行参数指定大临时文件的存储路径,应对一些特殊场景。
- 做回退机制:如果
$TMPDIR不存在或者空间不够,自动切换到/var/tmp;要是/var/tmp也不行,再提示用户手动指定路径。
关于XDG规范的说明
目前XDG规范里没有专门针对“大体积临时文件”的目录类型,因为现有标准目录已经能覆盖这类需求。除非后续社区有普遍的新需求,否则暂时不需要新增目录类型。
内容的提问来源于stack exchange,提问作者interfect
相关产品推荐
相关产品推荐

