我们可以使用stat
来获取inode编号,该编号可以唯一标识系统上的对象。
代码是:
int ret = stat(file_name, &file_info);
if (ret != 0) {
//report error
}
std::cout << file_info.st_ino; inode numb
std::cout = file_info.st_dev;
std::cout = file_info.st_mtime;
因此,我们可以检查文件是否已已移动或重命名。另一个函数fstat
采用int fd
,而不是文件名。使用文件名不是一个好的解决方案,因为我们检查后可能会移动文件。例如:
stat(file_name)
the inode num is same as before. so the file has not been moved.
-- the file has be moved, but we can not known--//
we open the file
we process new file use old file info
fstat(fd)
the inode num is same as before. so the file has not been moved.
-- the file has be moved
ok. we process the old file use old file info.
事情进展顺利,直到我使用c ++ ifstream
,怎么办?
为fd
获取ifstream
??或使用struct file *file
?
每个人都可以帮助我吗?