Dưới Linux, tôi có hai đường dẫn tập tin A và B:Xác định xem hai đường dẫn tệp có trỏ đến cùng một tệp trong Linux/C không?
const char* A = ...;
const char* B = ...;
bây giờ tôi muốn xác định, tôi nên open(2)
cả hai ...
int fda = open(A, ...);
int fdb = open(B, ...);
... Tôi sẽ nhận được hai filehandles mở cùng một tệp trong hệ thống tệp?
Để xác định điều này tôi nghĩ stat(2)
:
struct stat
{
dev_t st_dev;
ino_t st_ino;
...
}
Giống như (pseudo-code):
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;
}
Có bất kỳ trường hợp A và B là các tập tin tương tự nhưng IsSameFile
sẽ trở lại sai?
Có trường hợp nào A và B là các tệp khác nhau nhưng IsSameFile
sẽ trả về true?
Có cách nào tốt hơn để làm những gì tôi đang cố gắng làm không?
Bạn có thể có nhiều bộ mô tả tệp tham chiếu đến cùng một tệp, vâng. – teppic
@teppic: Có, và bạn cũng có thể có nhiều bộ mô tả tệp tham chiếu đến các tệp khác nhau. Câu hỏi của tôi là làm cách nào để xác định hai vũ trụ mà tôi đang ở (hoặc sẽ ở trong) –
Nếu bạn mở các bộ mô tả tập tin, bạn có thể sử dụng 'fstat' trực tiếp trên chúng - nếu các số inode và số thiết bị bằng nhau , hai con đường không thể tham chiếu đến các tệp khác nhau. – teppic