The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"получение информации о файле"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"получение информации о файле"  
Сообщение от m_kostik email(ok) on 29-Янв-09, 21:58 
Здравствуйте, уважаемые знатоки!
Помогите мне найти правильное решение проблемы:
я знаю дескриптор файла (тот самый, который создается при помощи open(), create(), dup()и т.п.), теперь мне нужно определить все свойства файла, которому соответствует этот дескриптор. Функция fstat() возвращает структуру stuct stat, из которой можно установить номер файлового индекса (поле st_ino), тип файла, права доступа и кое-что еще. Но как зная номер файлового индекса получить доступ к структуре struct inode? Как определить полное имя файла? Что-то я никак не могу дойти. Дескриптор процесс получает как унаследованный от своего родителя, т.е. никаких дополнительных данных нет. Работаю в режиме пользователя
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "получение информации о файле"  
Сообщение от AMDmi3 (??) on 29-Янв-09, 22:36 
Никак в обоих случаях.

Полный путь никак, потому что путей у файла может быть от 0 до бесконечности.
Иноду никак, потому что иноды - это кишки файловой системы. В разных ФС инода может иметь совершенно разную структуру, равно как и ее может не быть вообще. Для этого и придумали слой VFS - всю информацию тебе уже вытащили в struct stat, и больше тебе никуда лезть не надо, а уж тем более задумываться об устройстве файловой системы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "получение информации о файле"  
Сообщение от vic (??) on 29-Янв-09, 23:38 
>Здравствуйте, уважаемые знатоки!
>Помогите мне найти правильное решение проблемы:
>я знаю дескриптор файла (тот самый, который создается при помощи open(), create(),
>dup()и т.п.), теперь мне нужно определить все свойства файла, которому соответствует
>этот дескриптор. Функция fstat() возвращает структуру stuct stat, из которой можно
>установить номер файлового индекса (поле st_ino), тип файла, права доступа и
>кое-что еще. Но как зная номер файлового индекса получить доступ к
>структуре struct inode? Как определить полное имя файла? Что-то я никак
>не могу дойти. Дескриптор процесс получает как унаследованный от своего родителя,
>т.е. никаких дополнительных данных нет. Работаю в режиме пользователя

Как уже было сказано, в общем случае никак. Однако, в определенных случаях можно посмотреть на что указывает ссылка /proc/self/fd/<значение_дескриптора> с помощью readlink(). Результат будет - полный путь к файлу. Если файл открыт и удален, без закрытия, там же будет приписка "(Deleted)". Есс-но это будет корректно работать в пределах линуха.

Да, кстати, у открытого и удаленного файла нет пути вообще, и имени нет, но дескриптор валиден и валидны запись и чтение в него (и это нормально). Соответственно как в таком случае возможно в общем случае получение пути который был на момент открытия? - почти никак :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру