Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, к какому файлу обращается прога? 
:(
    Опции темы
FreeNUX
  Дата 2.7.2005, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



Сабж.
PM MAIL   Вверх
Ni@m
Дата 2.7.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



я не понял что тебе надо, но попробуй man lsof.
Эта тулза показывает открытые файлы и кем они заюзаны.
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
FreeNUX
Дата 2.7.2005, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



Конкретнее, такой пример - как узнать, какой файл открыт на чтение xmms'om в данный момент времени?
PM MAIL   Вверх
Ni@m
Дата 2.7.2005, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



lsof | grep xmms
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
Mayk
Дата 2.7.2005, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



Можно еще посмотреть в /proc/`getpid()`/fd.
Там симлинки на открытые файлы.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
FreeNUX
Дата 2.7.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



Ладно, ещё конкретнее. Как отследить, какой музыкальный файл открыт xmms'om на чтение.

Mayk
К сожалению во фряхе (FreeBSD 5.3) /proc пуст.

Ni@m
Я просил объяснить, как это реализовать программно (хотябы кратко описать алгоритм).
PM MAIL   Вверх
Ni@m
Дата 2.7.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



Если честно, то не знаю. Есть 2 выхода - покопать исходники lsof или я думаю что у самого xmms как-то узнать можно. Я сам покопаю исходлики lsof, может позже подскажу.
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
FreeNUX
Дата 2.7.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



Ni@m
Буду благодарен. Может быть я плохо смотрел, но lsof не видит какой музыкальный файл открыт на чтение xmms'ом.
PM MAIL   Вверх
comcon1
Дата 3.7.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



А у меня очень даже видит. Только что проверял. Правда среди открытых дескрипторов у XMMS-а еще куча. Мож у тебе не те параметры стоят.

А насчет програмно, так вот: у процесса есть две структуры -proc и user. У user есть ссылка на таблицу открытых дескрипторов - u_ofile. Покопай в этой области. По открытому дескриптору системной функцией stat можно посмотреть инфо о устройстве (в твоем случае - файле), которому этот дескриптор соответствует.


--------------------
PM MAIL   Вверх
FreeNUX
Дата 3.7.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



comcon1
Спасибо за совет.
PM MAIL   Вверх
Ni@m
Дата 3.7.2005, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



Это все хорошо, но stat работает с определеннім файлом. Не годится, если прийдется перечесать весь плейлист.
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
achmed
Дата 4.7.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 12.4.2004

Репутация: нет
Всего: нет



strace
PM MAIL   Вверх
Ni@m
Дата 4.7.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



Уф. Замучался уже клпать те злые исходники. Но кое-что нарыл. Можно пользоваться либами lsof.

У него в описании сказано =
Цитата
Show us what files are opened by processes whose names starts by bash.
lsof -c bash


И вот что я нашел в main()
Код

        case 'c':
        if (GOp == '+') {
            if (!GOv || (*GOv == '-') || (*GOv == '+')
            ||  !isdigit((int)*GOv))
            {
            (void) fprintf(stderr,
                "%s: +c not followed by width number\n", Pn);
            err = 1;
            if (GOv) {
                GOx1 = GObk[0];
                GOx2 = GObk[1];
            }
            } else
            CmdLim = atoi(GOv);
            break;
        }
        if (GOv && (*GOv == '/')) {
            if (enter_cmd_rx(GOv))
            err = 1;
        } else {
            if (enter_str_lst("-c", GOv, &Cmdl))
            err = 1;
        }
        break;

После некоторых соображения, я решил что в данном случае пользуется функция enter_str_lst, которая принимает первым праметром "-c", вторым - "xmms" к примеры - а третьим массив структур, содержащих строки - состоит из :
Код

struct str_lst {
    char *str;            /* string */
    int len;            /* string length */
    int f;                /* selected string find state */
    struct str_lst *next;        /* next list entry */
};


Я думаю, если подключить нужные либы(я сейчас не имею возможности сказать, но можно посмотреть ldd /usr/bin/lsof) и подключить lsof.h,proto.h(думаю этих хватит).
Может быть, что есть нормальный мануал по использованию функций из этого пакета, но я не нашел =(.
Это все конечно коряво и непроверенно, но тоже имеет право на жизнь. Я как получу возможность, так сразу проверю!
Если будешь пробовать, сообщи о результатах.

--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
FreeNUX
Дата 10.7.2005, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 29.5.2004

Репутация: нет
Всего: нет



Ni@m
Спасибо за беспокойство, но боюсь в данном случае lsof не подойдёт, так уж сложилось, что вся моя музыка лежит на разделе с фс NTFS, а lsof , по поводу открытого музыкального файла, выдаёт - unknown file system type: ntfs.
PM MAIL   Вверх
Ni@m
Дата 17.7.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



Да ничего. Хоть сам немного растормошился =)
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.