2015-02-12 3 views
2

Я работаю над небольшим проектом в C на Linux, и у меня возникла проблема. Я должен сделать программу, которая имитирует активность WatchDog. Поэтому я написал почти весь код, но я не знаю, как сделать самую важную роль. Пока мое приложение работает в фоновом режиме, оно должно обнаруживать, когда к ним подключены определенные файлы. Я сохранил в некоторых структурах inode, путь и имя этих файлов. Итак, имея эту информацию о файлах, как я могу определить, когда процесс (любой процесс, а не определенный) пытается получить доступ к одному из файлов? Редактировать: На самом деле, я должен обнаружить следующие события: когда файл был открыт и кто-то пытается изменить файл. Например, если пользователь что-то пишет в файл, а затем пытается сохранить изменения, я должен разрешить ему или нет делать это.Как определить, когда определенный файл был открыт?

+0

Почему бы просто не удалить права на запись из файла? –

+0

Никогда не делал этого, но я считаю, что вы должны сделать системный вызов, чтобы получить все процессы, затем получить список дескрипторов для каждого процесса, а затем получить имя файла для этих дескрипторов. – Tarik

+0

Вам нужно предотвратить запись, или вам нужно ее пассивно обнаружить? – Barmar

ответ

0

Вы ищете наблюдателя файловой системы. Для этого вы можете использовать Inotify: http://en.m.wikipedia.org/wiki/Inotify

+0

Из того, что я читал, он должен это сделать. Я попробую, и я буду держать вас в курсе. Спасибо! [не может отменить ответ, потому что я только что подписался, и у меня нет необходимой репутации] –

+0

К сожалению, для искателя нужны функциональные возможности, которые inotify не может предоставить. –

+0

«если пользователь что-то пишет в файл, а затем пытается сохранить изменения, я должен разрешить ему или не делать этого». Это потребует от вас перехвата системных вызовов, которые открывают файлы и записывают их. Inotify не делает этого действительно. – Tarik

Смежные вопросы