如何解决您如何检查两个不同的文件引用“字符串”是否引用同一个文件?
我们有一个直接用 C 语言编写的函数,用于告诉我们两个文件引用是否指向同一个文件。现在它首先检查传入的参数是否实际上是相同的指针,如果不是,则查看字符以查看字符串是否相同。但这并不能说明引用同一文件的不同方式的可能性。例如...
“/d1/d2/d3/theFile”对比“../d3/theFile”
那些可能是同一个文件,也可能不是,这取决于目录结构和当前参考点的位置。我想改进以下函数,以便能够检查对文件的字符串引用是否与另一个字符串引用同一个文件...
static bool is_same_file (const char *f1,const char *f2) {
if (f1==f2)
return true;
return (0==strcmp(f1,f2));
}
我想可以尝试打开这两个文件并以某种方式使用它们。但我不知道如何检查打开的文件是否是驱动器上的同一个物理文件,而不仅仅是碰巧存在于不同目录中的同一个文件。在 C# 中,有一个 FileInfo 类可用于根据该引用字符串查找文件,然后您可以比较完整的目录信息、文件名等。有没有办法在 C 中做类似的事情?
解决方法
在 POSIX 系统上,您可以使用 stat()
检查它们在同一文件系统上是否具有相同的 inode 编号。
您还应该检查生成编号,以处理由于文件被删除和新文件在两次调用之间获取其 inode 编号而导致的竞争条件。
#include <sys/stat.h>
static bool is_same_file (const char *f1,const char *f2) {
struct stat s1,s2;
if (stat(f1,&s1) < 0)) {
perror("stat f1");
return false;
}
if (stat(f2,&s2) < 0)) {
perror("stat f2");
return false;
}
return s1.st_dev == s2.st_dev && s1.st_ino == st.st_ino && s1.st_gen == s2.st_gen;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。