确定两个文件路径是否指向LinuxC下的同一文件?

确定两个文件路径是否指向LinuxC下的同一文件?,第1张

概述在 Linux下,我有两个文件路径A和B: const char* A = ...;const char* B = ...; 我现在想确定,我应该打开(2)他们两个…… int fda = open(A, ...);int fdb = open(B, ...); …我会在文件系统中打开两个文件句柄到同一个文件吗? 为了确定这一点,我想到了stat(2): struct stat{ d 在 Linux下,我有两个文件路径A和B:

const char* A = ...;const char* B = ...;

我现在想确定,我应该打开(2)他们两个……

int fda = open(A,...);int fdb = open(B,...);

…我会在文件系统中打开两个文件句柄到同一个文件吗?

为了确定这一点,我想到了stat(2):

struct stat{    dev_t st_dev;    ino_t st_ino;    ...}

像(伪代码)的东西:

bool IsSamefile(const char* sA,const char* sB){    stat A = stat(sA);    stat B = stat(sB);    return A.st_dev == B.st_dev && A.st_ino == B.st_ino;}

有没有A和B是同一个文件但是IsSamefile会返回false的情况?

是否存在A和B是不同文件但IsSamefile会返回true的情况?

有没有更好的方法来做我想做的事情?

解决方法 您的程序在所有情况下都能正常工作,因为A.st_ino将返回系统中文件的inode编号.由于inode编号是唯一的,因此您的程序将正确识别打开的两个文件是否相同.

您还可以检查A.st_mode的值以确定该文件是否为符号链接.

总结

以上是内存溢出为你收集整理的确定两个文件路径是否指向Linux / C下的同一文件?全部内容,希望文章能够帮你解决确定两个文件路径是否指向Linux / C下的同一文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1030747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存