Автор Тема: Програмка, следяща съдържанието на файлове  (Прочетена 5048 пъти)

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
В известен смисъл е така, макар че ми стана интересно как стигна до този извод.

Такива файлове няма на практика - нито се създават, нито се модифицират, нито се трият, всичко с псевдо файловите системи е една илюзия :)
Активен

"Knowledge is power" - France is Bacon

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
В известен смисъл е така, макар че ми стана интересно как стигна до този извод.
При ls -l се вижда дата и час на създаване на файловете/директориите и това е моментът, когато за пръв път съм погледнал съдържанието на дадената директория, а не моментът на стартиране на системата, както си мислих досега.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Ами нормално е това. Макар че за някои директории или файлове там може и да е boot time-а датата. Това не са истински файлове така или иначе, нормално е да нямат дата на създаване. Грубо казано, всичко работи на базата на hook-ове в VFS слоя и вместо наистина да имаш някакъв файл, има някакъв callback, който се вика когато  четеш от файла или листваш съдържанието на директория. Конкретно как е реализиран sysfs не знам, но предполагам е сходно с procfs - листването на директорията всъщност е обхождане на един свързан списък от структури. Структурата може да има поле за дата на създаване, но обикновено е NULL - тогава dentry-то се попълва с настоящата дата.
Активен

"Knowledge is power" - France is Bacon

remotexx

  • Напреднали
  • *****
  • Публикации: 3244
    • Профил
@gat3way и аз имам няколко въпроса по темата - понеже файловете не съществуват а се имитират при опит за четене - какво ще стане ако имаме напр. такъв файл с размер от 1 байт и:
1. Отваряме файла, четем един байт, спим 1 сек., четем (още) един байт:
- нормално ще ни симулира текущото състояние отново и ние ще го прочетем (въпреки че е след края на файла);
- грешка - четене след края на файла (тъй като размера на файла е 1 байт) ..нищо че файла е измислен и може да ни го даде да го прочетем като следващ байт;
т.е. въпроса е дали е задължително да се прави seek(0) преди всяко четене

2. Кешира ли се от ОС напр. същата ситуация от по-горе като почваме да четем всеки път от началото за по-сигурно обаче ОС гледа в кеша гледа дата (и понеже никой друг не достъпвал файла и дата и час същите) и решава че това в кеша му е същото и не чете новото състояние..
т.е. въпроса е дали трябва да се затваря и отваря файла всеки път за да изчисти кеша

За кеша нямам спомени ObjectPascal дали можеше да му се оказва по някакъв начин да не го ползва подобно на O_DIRECT в С/С++


та затова предполагам колегата всеки път отваря-затваря файла което много го бави - въпросът е може ли да спести seek(0) всеки път, а отварянето и затварянето?

П.П. или дай инфо ако знаеш как може да си направи собствен "hook в VFS слоя" да му вика callback при нужда. Аз му дадох един линк - ама или при него не сработи ли не успя да го подкара (не разбрах и аз какво стана) ...дали не е щото беше С/С++ а не ObjectPascal - не знам  8)
« Последна редакция: Dec 29, 2014, 21:04 от remotexx »
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Аз му дадох един линк - ама или при него не сработи ли не успя да го подкара (не разбрах и аз какво стана) ...дали не е щото беше С/С++ а не ObjectPascal - не знам  8)
Не съм пробвал да го подкарвам. След като пробвам чрез polling ще мисля какво ще правя.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Ей развалихте ми гледането на The Interview :)

Цитат
@gat3way и аз имам няколко въпроса по темата - понеже файловете не съществуват а се имитират при опит за четене - какво ще стане ако имаме напр. такъв файл с размер от 1 байт и:
1. Отваряме файла, четем един байт, спим 1 сек., четем (още) един байт:
- нормално ще ни симулира текущото състояние отново и ние ще го прочетем (въпреки че е след края на файла);

Четенето на вторият байт ще ти даде грешка (EOF).

Цитат
- грешка - четене след края на файла (тъй като размера на файла е 1 байт) ..нищо че файла е измислен и може да ни го даде да го прочетем като следващ байт;
т.е. въпроса е дали е задължително да се прави seek(0) преди всяко четене

Не мисля че seek ще сработи, при procfs поне по спомени не работеше, може да са го имплементирали за sysfs. В общият случай отваряш и четеш наново.

Цитат
2. Кешира ли се от ОС напр. същата ситуация от по-горе като почваме да четем всеки път от началото за по-сигурно обаче ОС гледа в кеша гледа дата (и понеже никой друг не достъпвал файла и дата и час същите) и решава че това в кеша му е същото и не чете новото състояние..
т.е. въпроса е дали трябва да се затваря и отваря файла всеки път за да изчисти кеша

Не се минава през никакво кеширане, то и няма смисъл. Получаваш данните на момента :)

Цитат
П.П. или дай инфо ако знаеш как може да си направи собствен "hook в VFS слоя" да му вика callback при нужда.

Отново говоря за procfs, със sysfs не съм толкова запознат - там има относително добре документирано API, в общият случай си регистрираш "файл" заедно с няколко callback-а които ще ти се викат при четене/писане/etc. Предполагам и със sysfs е подобно. В момента наизуст не мога да говоря, защото последно съм имал вземане-даване с това преди доста време, но мога да изкопая ако нещо ти трябва.

П.П userspace процес не знам да може да го прави това, трябва да го имплементираш като kernel модул естествено.
Активен

"Knowledge is power" - France is Bacon

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
А иначе ако говориш за hook-ване на VFS нещата по-абстрактно и ако много държиш да си цапаш ръцете, има много места където можеш да се "захванеш". Линукския ring0 malware обиквено модифицира IDT таблицата, създава си копие и си пренасочва определени системни повиквания към негови си функции, това е лесният начин да правиш абсолютно всякакви гаври с файлове, без значение от файлова система - примерно да криеш файлове, да променяш незабележимо съдържание на файлове и т.н. Това е доста добре изпипан модел и продължава да работи. Разните "подсилени" линукс ядра малко или много може да те бият през ръцете естествено.
Активен

"Knowledge is power" - France is Bacon