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

如何检查已打开的文件是否已被其他进程移动或删除

我在LinuxOS上使用C进程将数据写入文件.它使用open()write()函数,我一直在想是否有另一个进程rm’d或mv为该文件.我的流程如何找出并重新创建文件?解决方法:您可

我在Linux OS上使用C进程将数据写入文件.它使用open()/ write()函数,我一直在想是否有另一个进程rm’d或mv为该文件.我的流程如何找出并重新创建文件?

解决方法:

您可以使用fstat()来获取有关打开文件的信息.如果st_nlink字段为零,则文件已从文件系统中删除(可能是通过移动到其他文件系统,但是没有真正的方法可以确定).有一个很好的机会你有唯一剩下的参考文件 – 虽然可能有其他进程也保持打开.在具有文件的打开文件描述符的最后一个进程最终关闭文件之前,不会释放磁盘空间.

如果st_nlink字段仍然是正数,那么您的文件在文件系统中的某处仍然有一个名称.然后,您需要使用stat()来确定给定文件名的st_dev和st_ino字段是否与文件描述符中的相同字段匹配.如果名称仍然存在且具有相同的设备和inode编号,则它是“相同”文件(尽管内容可能已更改).如果存在差异,则打开的文件与name指定的文件不同.

请注意,如果要确保给定名称不是文件的移动副本的符号链接,那么在打开文件时必须对文件使用lstat()(以确保它不是符号链接)在那一点上),再次检查文件时(而不是使用stat()).


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