Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93

Наблюдение за папкой, используя inotify

25.03.2013, 17:02. Показов 3411. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Существует общая папка большой сети, к которой каждый пользователь компьютера сети имеет доступ как и чтения так и записи. Я делаю программу в QT Creator на языке C++ для ОСи - Ubuntu, используя Inotify(т.к C++, то в моём случае - inotify-cxx), которая должна наблюдать за изменениями папки(создание файла, переименование, удаление...).

Переименование в Unix системах проходит двумя событиями - IN_MOVED_FROM и IN_MOVED_TO. Мне программа это впринципе и выдаёт, что верно! Но хотелось бы, чтобы вместо двух этих событий было одно - IN_RENAMED

В Inotify для этого якобы существуют "cookies", даже пишут что только для события Переименования эти Куки и нужны, но НИГДЕ я не нашёл примера использования этих куков... Поэтому я здесь...нуждаюсь в помощи в решении этого вопроса.

P.S. В Windows это делается в 1000 раз проще
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2013, 17:02
Ответы с готовыми решениями:

Как отслеживать и соответственно вовремя изменить картинку с закрытой папкой на картинку с открытой папкой?
1) Как отслеживать и соответственно вовремя изменить картинку с закрытой папкой на картинку с открытой папкой - если пользователь открывает...

Не могу разобраться с папкой Desktop и скрытой папкой Public Desktop
Я хочу получить возможность взаимодействия с ярлыками. Одни ярлыки находятся по адресу c:\users\user\Desktop и к ним претензий нет. Но есть...

Работа с inotify
Хотел задать вопрос кто-то работал с данным видом API и его удобно вообще включать в достаточно обширный проект под Linux, и вообще...

11
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
25.03.2013, 17:37
QFileSystemModel может без проблем мониторить каталоги... и вероятней всего она в себе инкапсулирует Inotify.
0
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
26.03.2013, 03:36
Цитата Сообщение от Кудя Посмотреть сообщение
делаю программу в QT Creator на языке C++ для ОСи - Ubuntu, используя Inotify(т.к C++, то в моём случае - inotify-cxx)
А причем тогда библиотека Qt, если вопрос исключительно по Inotify?
Если бы делал программу в какой-нибудь IDE типа Anjuta, то вопрос бы задавал в форуме по GTK? Такая что ли логика?

Добавлено через 7 минут
Цитата Сообщение от oxotnik Посмотреть сообщение
QFileSystemModel
Наверное, имелся ввиду класс QFileSystemWatcher, у которого такой статус:
QFileSystemWatcher
State: Deprecated
Reasoning: flawed design, a replacement is required. We’re open for ideas in that area.
1
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
26.03.2013, 23:56  [ТС]
Цитата Сообщение от kamre Посмотреть сообщение
А причем тогда библиотека Qt, если вопрос исключительно по Inotify?
Если бы делал программу в какой-нибудь IDE типа Anjuta, то вопрос бы задавал в форуме по GTK? Такая что ли логика?
Я просто хотел, чтобы человек, читающий мою проблему знал как можно больше информации во избежании недопониманий. Неужели обязательно было писать своё мнение о моём способе создания содержания темы...

Цитата Сообщение от kamre Посмотреть сообщение
QFileSystemWatcher
Спасибо за ответ. Странно что раньше я не натыкался на этот класс... Сейчас же буду реализовывать этот способ наблюдения за папкой.

Но! Также я надеюсь, что кто-нибудь опишет, как же использовать cookies в Inotify.

Добавлено через 4 часа 25 минут
Цитата Сообщение от oxotnik Посмотреть сообщение
и вероятней всего она в себе инкапсулирует Inotify.
Да, QFileSystemWatcher содержит в себе Inotify.

Я уже опробовал QFileSystemWatcher в действии, очень удобный класс. Но, к сожалению, я не нашёл способа обрабатывать события. Мне нужно сортировать события. Для визуального представления: Человек локальной сети создаёт файл в папке, за которой следит программа. Программа должна выдать следующее:
["время": CREATED "путь и имя файла"]
Аналогично при Переименовании, Удалении...
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 09:25
Цитата Сообщение от Кудя Посмотреть сообщение
Я уже опробовал QFileSystemWatcher в действии, очень удобный класс. Но, к сожалению, я не нашёл способа обрабатывать события. Мне нужно сортировать события. Для визуального представления: Человек локальной сети создаёт файл в папке, за которой следит программа. Программа должна выдать следующее:
["время": CREATED "путь и имя файла"]
Аналогично при Переименовании, Удалении...
Он выдает сигнал, что прошли изменения, и ничего более.
Что бы узнать что и как изменилось, надо задействовать QFileInfo и его методы: lastModified(), lastRead() и т.п.
Т.е. алгоритм примерно такой будет: QFileSystemWatcher выдает сигнал об изменении файла, на этот файл напускаем QFileInfo и выдаем дату изменения.
Если добавлен/удален файл, тогда QFileSystemWatcher выдаст сигнал об изменении папки, сравниваем с предыдущим состоянием (состояние надо будет хранить) и выводим изменения.
1
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
27.03.2013, 14:00  [ТС]
oxotnik, Спасибо за ответ. Сейчас же буду пробовать вами предложенный класс с его методами.

P.S. Я более чем уверен, что QFileSystemWatcher содержит в себе Inotify(или основан на Inotify), который умеет сортировать события. Просто класс ущемил, подавил некоторые возможности... Очень очень сильные программисты смогут получить события от QFileSystemWatcher... Но это не суть важно
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 14:01
Цитата Сообщение от Кудя Посмотреть сообщение
Просто класс ущемил, подавил некоторые возможности...
Нет, его как раз реализовали так, что бы не было всяких ненужностей и двояких толкований. Все остальное реализовано в QFile & QFileInfo.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
27.03.2013, 14:09
Цитата Сообщение от Кудя Посмотреть сообщение
P.S. Я более чем уверен, что QFileSystemWatcher содержит в себе Inotify(или основан на Inotify), который умеет сортировать события.
Note: On systems running a Linux kernel without inotify support, file systems that contain watched paths cannot be unmounted.
Цитата Сообщение от Кудя Посмотреть сообщение
Просто класс ущемил, подавил некоторые возможности...
А в других ОС inotify есть?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
27.03.2013, 14:30
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
А в других ОС inotify есть?
Класс в зависимости от целевой системы инкапсулирует либо inotify, либо виндовые апи по наблюдению за файловой системой.
Т.е. если качаешь либы для линукса, то он через inotify, если для винды качаешь - через ВинАпи работает. Просто для любых платформ от предоставляет одинаковый интерфейс работы.
0
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
27.03.2013, 23:09  [ТС]
Что-то не получается у меня с QFileInfo Но вы мне все и так очень сильно помогли. Спасибо всем!
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
28.03.2013, 10:06
Цитата Сообщение от oxotnik Посмотреть сообщение
Класс в зависимости от целевой системы инкапсулирует либо inotify, либо виндовые апи по наблюдению за файловой системой.
Т.е. если качаешь либы для линукса, то он через inotify, если для винды качаешь - через ВинАпи работает. Просто для любых платформ от предоставляет одинаковый интерфейс работы.
Читай документацию. Там есть упоминание BSD и Mac OS X. В общем случае отдельных событий таких как IN_MOVED_FROM и IN_MOVED_TO может не быть, поэтому и интерфейс QFileSystemWatcher упрощенный.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.03.2013, 10:30
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
В общем случае отдельных событий таких как IN_MOVED_FROM и IN_MOVED_TO может не быть, поэтому и интерфейс QFileSystemWatcher упрощенный.
Да я вобщем то и не утверждал, что он будет прокидывать именно эти события до пользователя. Я говорил, что он инкапсулирует в себе системные вызовы для каждой конкретной системы, и предоставляет интерфейс для уведомления об изменениях в файловой структуре. Остальные события, как писал выше надо ловить через QFilrInfo/QFile/QDir (которые в свою очередь свои системные фишки инкапсулируют).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2013, 10:30
Помогаю со студенческими работами здесь

Наблюдение
Для добавления источников обновления есть ресурс urpmi.mandriva.ru. По личным наблюдениям, если бездумно добавлять все перечисленные там...

Наблюдение
Смотрю я и вижу что траф то упал, но не в таких пропорциях как позиции. Конечно я учитываю что юзеры не нашли мой сдл по яше, пошли в...

Наблюдение
В общем такая ситуация произошла. Был сайт с тиц 10 :) после пересчета пр, он поднялся с 0 до 1. Сейчас у сайта тиц 0, да и в общее его...

Скрытное наблюдение
Есть у меня такая программа: Скрытая Камера 2.14 - Программа Скрытая Камера предназначена для одновременного наблюдения за компьютерами...

Любопытное наблюдение
После дефолта тИЦ-а много нервов утекло:) В последний пересчет неожиданно обнаружил, что у моих сайтов, которые были в Яке, вернулся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru