Моя ОС - Linux. Я программирую на C. Я знаю, что я могу использовать lstat() для распознавания софт-ссылки, т. Е. Использовать S_ISLNK (st.st_mode). Но как я могу узнать, что ссылка - жесткая ссылка? если ссылка является жесткой ссылкой, она будет считаться обычным файлом. Тем не менее, я также хочу отличить обычный файл от жесткой ссылки. Есть ли способы справиться с этим делом?как использовать lstat(), чтобы определить, есть ли жесткая ссылка или нет.
0
A
ответ
2
Но как я могу узнать, что ссылка жесткая ссылка?
Вы не можете.
«Жесткая ссылка» на самом деле не является чем-то особенным. Это просто запись в каталоге, которая указывает на то же данные на диске, что и запись каталога в другом месте. только способ достоверно идентифицировать жесткие ссылки - это сопоставить все пути вашей файловой системы к inodes, а затем посмотреть, какие из них указывают на то же значение.
0
struct stat имеет член st_nlink для количества жестких ссылок. Это> 1, файл указывается в одной из жестких ссылок на фактическое содержимое файла.
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
Вот пример программы:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
struct stat buf = {0};
lstat("origfile", &buf);
printf("number of hard links for origfile: %d\n", buf.st_nlink);
}
выход:
$ touch origfile
$ ./a.out
number of hard links for origfile: 1
$ ln origfile hardlink1
$ ./a.out
number of hard links for origfile: 2
$ ln origfile hardlink2
$ ./a.out
number of hard links for origfile: 3
Смежные вопросы
- 1. Рекурсивная жесткая ссылка
- 2. Как использовать NSURLSession, чтобы определить, нарушена ли перенаправленная ссылка?
- 3. Есть ли способ определить, сжата ли страница или нет?
- 4. Есть ли библиотека или класс без проблем, чтобы определить, является ли пользователь Wi-Fi или нет?
- 5. Как определить, есть ли у iPhone дисплей сетчатки или нет?
- 6. Есть ли способ определить, приостановлен ли PID Linux или нет?
- 7. Жесткая ссылка в файле makefile
- 8. Почему требуется жесткая ссылка и программная ссылка?
- 9. Как определить, нажата ли кнопка или нет
- 10. Как определить, подключен ли сокет или нет?
- 11. как назвать lstat (2) вместо lstat (3)?
- 12. Есть ли способ в Java, чтобы определить, вызван ли метод в статическом инициализаторе (или нет)?
- 13. Как определить, существует ли кадр или нет
- 14. Есть ли способ для кода Swift, чтобы определить, работает ли он на игровой площадке или нет?
- 15. Есть ли запрос, чтобы определить, существует ли свойство объекта или нет в онтологии, созданной в Protege.
- 16. Код, чтобы определить, является ли строка Pangram или нет?
- 17. Portable SQL, чтобы определить, существует ли таблица или нет?
- 18. определить, успешна ли video.load или нет - javascript
- 19. тип тега, чтобы определить, есть ли флажок
- 20. Использовать ли CMS или нет
- 21. Docker LAMP stack - lstat apache_default: нет такого файла или каталога?
- 22. Может ли жесткая ссылка на объект WeakReference.get() вызвать утечку памяти?
- 23. Есть ли лицо на картине или нет
- 24. Метеор требует времени, чтобы узнать, есть ли {{currentUser}} или нет
- 25. Как проверить, есть ли комментарий или нет
- 26. Чтобы проверить, есть ли канал HLS onair или нет
- 27. определить, выбран ли DropDownList или нет
- 28. Как определить, назначен ли идентификатор или ссылка? (FLEX/BISON)
- 29. Определить, потерян ли или нет FocusEvent компонента.
- 30. Как определить, работает ли ссылка?
Конечно, если это не мягкая ссылка, то она должна быть жесткая связь? –
Обычный файл * есть * жесткая ссылка. – wildplasser