热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何在替换原子文件时保留所有权和权限?

如何解决《如何在替换原子文件时保留所有权和权限?》经验,需要怎么解决?

因此,正常的POSIX方式安全地,原子地替换文件的内容是:

fopen(3) 同一卷上的临时文件

fwrite(3) 临时文件的新内容

fflush(3)/ fsync(2)确保将内容写入磁盘

fclose(3) 临时文件

rename(2) 用于替换目标文件的临时文件

但是,在我的Linux系统(Ubuntu 16.04 LTS)上,此过程的一个后果是目标文件的所有权和权限更改为临时文件的所有权和权限,默认为uid/ gid和当前umask.

我想我会stat(2)在覆盖之前将代码添加到目标文件中,并且在调用之前将fchown(2)//fchmod(2)临时文件添加到目标文件中rename,但是由于这个原因可能会失败EPERM.

是唯一的解决方案,以确保文件的uid/ gid匹配当前用户和进程组覆盖文件?在这种情况下是否有一种安全的方法可以退回,还是我们必然会失去原子保证?


推荐阅读
author-avatar
周白行_170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有