Мы можем использовать 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
?
Все могут мне помочь?