Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Как узнать, к какому файлу обращается прога? |
Автор: FreeNUX 2.7.2005, 00:23 |
Сабж. |
Автор: Ni@m 2.7.2005, 02:25 |
я не понял что тебе надо, но попробуй man lsof. Эта тулза показывает открытые файлы и кем они заюзаны. |
Автор: FreeNUX 2.7.2005, 02:47 |
Конкретнее, такой пример - как узнать, какой файл открыт на чтение xmms'om в данный момент времени? |
Автор: Ni@m 2.7.2005, 04:29 |
lsof | grep xmms |
Автор: Mayk 2.7.2005, 06:23 |
Можно еще посмотреть в /proc/`getpid()`/fd. Там симлинки на открытые файлы. |
Автор: FreeNUX 2.7.2005, 16:01 |
Ладно, ещё конкретнее. Как отследить, какой музыкальный файл открыт xmms'om на чтение. Mayk К сожалению во фряхе (FreeBSD 5.3) /proc пуст. Ni@m Я просил объяснить, как это реализовать программно (хотябы кратко описать алгоритм). |
Автор: Ni@m 2.7.2005, 17:49 |
Если честно, то не знаю. Есть 2 выхода - покопать исходники lsof или я думаю что у самого xmms как-то узнать можно. Я сам покопаю исходлики lsof, может позже подскажу. |
Автор: FreeNUX 2.7.2005, 19:49 |
Ni@m Буду благодарен. Может быть я плохо смотрел, но lsof не видит какой музыкальный файл открыт на чтение xmms'ом. |
Автор: comcon1 3.7.2005, 10:57 |
А у меня очень даже видит. Только что проверял. Правда среди открытых дескрипторов у XMMS-а еще куча. Мож у тебе не те параметры стоят. А насчет програмно, так вот: у процесса есть две структуры -proc и user. У user есть ссылка на таблицу открытых дескрипторов - u_ofile. Покопай в этой области. По открытому дескриптору системной функцией stat можно посмотреть инфо о устройстве (в твоем случае - файле), которому этот дескриптор соответствует. |
Автор: FreeNUX 3.7.2005, 13:45 |
comcon1 Спасибо за совет. |
Автор: Ni@m 3.7.2005, 17:53 |
Это все хорошо, но stat работает с определеннім файлом. Не годится, если прийдется перечесать весь плейлист. |
Автор: achmed 4.7.2005, 10:37 |
strace |
Автор: Ni@m 4.7.2005, 17:40 | ||||||
Уф. Замучался уже клпать те злые исходники. Но кое-что нарыл. Можно пользоваться либами lsof. У него в описании сказано =
И вот что я нашел в main()
После некоторых соображения, я решил что в данном случае пользуется функция enter_str_lst, которая принимает первым праметром "-c", вторым - "xmms" к примеры - а третьим массив структур, содержащих строки - состоит из :
Я думаю, если подключить нужные либы(я сейчас не имею возможности сказать, но можно посмотреть ldd /usr/bin/lsof) и подключить lsof.h,proto.h(думаю этих хватит). Может быть, что есть нормальный мануал по использованию функций из этого пакета, но я не нашел =(. Это все конечно коряво и непроверенно, но тоже имеет право на жизнь. Я как получу возможность, так сразу проверю! Если будешь пробовать, сообщи о результатах. |
Автор: FreeNUX 10.7.2005, 01:44 |
Ni@m Спасибо за беспокойство, но боюсь в данном случае lsof не подойдёт, так уж сложилось, что вся моя музыка лежит на разделе с фс NTFS, а lsof , по поводу открытого музыкального файла, выдаёт - unknown file system type: ntfs. |
Автор: Ni@m 17.7.2005, 20:33 |
Да ничего. Хоть сам немного растормошился =) |