Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89

Реализация struct file в ядре

23.12.2014, 18:46. Показов 3591. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем снова привет.

В ядре, в заголовочном файле fs.h есть struct file, которая ответственна собственно за сам файл.
Если тут есть специалисты по системному программированию, прошу подсказать, каким образом система понимает что файл является директорией?
Какой флаг, структура или что-то ещё ответственны за это?

Я понимаю что есть системный вызов readdir, но не очень понимаю где эта информация хранится в ядре.
Подскажите пожалуйста, куда копать, какие структуры изучать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2014, 18:46
Ответы с готовыми решениями:

Реализация семафора в ядре Linux
SUSE Linux 11.1 ядро 2.6.27.7-9 * интересует где находится реализация семафора и как подлючить при написании программы ...

Struct sockaddr vs. struct sockaddr_in
Вопрос,связанный с переносимостью кода на другие платформы. Читаю эту книжку http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html...

typedef struct Foo или struct Foo
В чём разница между: typedef struct { int a; }Foo; и struct Foo { int a; }

10
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.12.2014, 19:11
Цитата Сообщение от kordax Посмотреть сообщение
В ядре, в заголовочном файле fs.h есть struct file, которая ответственна собственно за сам файл
Не за файл на диске, а за уже открытый файл.
Цитата Сообщение от kordax Посмотреть сообщение
Какой флаг, структура или что-то ещё ответственны за это?
inode'ы ответственны
1
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
23.12.2014, 19:17  [ТС]
Где можно inode найти?
Спасибо за инфу по struct file.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.12.2014, 19:27
Цитата Сообщение от kordax Посмотреть сообщение
Где можно inode найти?
Структуру inode VFS можно найти там же Можно ее смотреть. Глубже опускаться до ФС смысла нет в данном вопросе.
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
23.12.2014, 19:41  [ТС]
Не могу найти реализацию inode, без понятия что она из себя представляет.
Не подскажите?
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.12.2014, 19:42
Цитата Сообщение от kordax Посмотреть сообщение
Не могу найти реализацию inode
Что значит реализация inode?
Цитата Сообщение от kordax Посмотреть сообщение
Не подскажите?
Не понимаю, что тебе нужно.
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
23.12.2014, 19:50  [ТС]
Сама структура inode и что она из себя представляет, а то grep очень много результатов даёт.
Например, я хочу внести изменения и добавить новый элемент в само понятие файла. Это возможно?
Добавить какой-нибудь параметр и т.д.
Я ищу в файлах ядра, но там ничего не вижу.

Похожее нашел в /usr/include/linux/fs.h
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.12.2014, 20:03
Цитата Сообщение от kordax Посмотреть сообщение
Сама структура inode и что она из себя представляет
Честно признаюсь, каждое поле этой структуры мне описывать лень. Ищи информацию сам. Ты же хотел знать
Цитата Сообщение от kordax Посмотреть сообщение
куда копать
а не просить копать за тебя.
Если интересует именно директория/не директория, то это поле i_mode. Если интересует то, как ты писал readdir, то это реализуется на уровне файловой системы. ФС в свою очередь в сорцах ядра разделены по директориям по названию. Каждая ФС по-своему определит inode_operations и file_operations. Например, для ext3:
http://lxr.free-electrons.com/... ?v=3.6#L94
Почитай какую-нибудь книгу про ядро Linux, станет понятнее.
Цитата Сообщение от kordax Посмотреть сообщение
а то grep очень много результатов даёт.
Ожидаемо. Разберись в структуре ядра, чтобы не грепать там, где тебе пока не нужно. Где находится описание inode VFS я уже написал.
Цитата Сообщение от kordax Посмотреть сообщение
Например, я хочу внести изменения и добавить новый элемент в само понятие файла. Это возможно?
Конечно.
Цитата Сообщение от kordax Посмотреть сообщение
Я ищу в файлах ядра, но там ничего не вижу.
Печально.

Добавлено через 2 минуты
Здесь пример использования поля (проверка на директория, или нет), для выставления нужных обработчиков для inod'ы:
http://lxr.free-electrons.com/... =3.6#L3025
Кури.

Добавлено через 2 минуты
Цитата Сообщение от kordax Посмотреть сообщение
Похожее нашел в /usr/include/linux/fs.h
Oh, nice
1
 Аватар для chocobo
16 / 16 / 17
Регистрация: 22.06.2013
Сообщений: 73
Записей в блоге: 3
23.12.2014, 21:24
Если интересно, можете глянуть на моем гитхабе, как я написал простой драйвер в ядре линукс для символьного девайса. В коде учавствует и struct file и inode. Могут при необходимости дать подробный комментарий по коду.

https://github.com/thatskriptk... e_module.c

А здесь я сделал простое чтение файла (девайса /dev/urandom)
https://github.com/thatskriptk... ernel_IO.c
1
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
23.12.2014, 23:27  [ТС]
Хорошо, всё понял.
Есть какая-нибудь удобночитаемая книга по структуре ядра?
У меня после работы не очень много времени, чтобы читать очередного Страуструпа.

Драйвер заценил, смотрю.

C
1
2
inode->i_op = &ext3_dir_inode_operations;
inode->i_fop = &ext3_dir_operations;
Вот это уже круто, теперь понятнее что искать и представлять.
0
 Аватар для chocobo
16 / 16 / 17
Регистрация: 22.06.2013
Сообщений: 73
Записей в блоге: 3
24.12.2014, 06:35
Лучший ответ Сообщение было отмечено kordax как решение

Решение

1) К превиликому сожалению, самая лучшая книга по ядру - это исходники. Лучший сайт по исходникам ядра, я считаю

http://lxr.free-electrons.com/ident

Можете искать по идентификатору, например вводите struct file и вперед, смотреть как и что.

2) Начнем с русского языка. Очень хорошо описал написание дров, модулей и проччих вещей в ядре - Олег Цилюрик. Очень редко можно встретить более менее актуальный материал по ядру на русском! Очень рекомендую.
http://rus-linux.net/MyLDP/BOO... index.html

3) На opennet.ru тоже есть материал на русском, но там немного посложнее, средний уровень подготовки я считаю, но мне как новичку помогло.

http://www.opennet.ru/base/dev... s.txt.html

4) Теперь перейдем к топовым книгам. Коротенькая, информативная, стандарт для разработчиков ядра, это конечно же Linux Device Driver, 3 издание и Adison.Wesley.Linux.Kernel.Development.3 rd.Edition . По первой (LDD) я делал мноиге примеры, очень рекомендую ее. Вторая как раз по структуре ядра, идеальная прям, открываете оглавление и читаете то что интересно.

Первая книга есть в октрытом доступе, вот оффициальная ссылка.
http://lwn.net/Kernel/LDD3/

5) По написанию дров под линь, очень мало современных материалов и книг, очень прям мало. Потому что ядро развивается очень быстро, каждый день сотни коммитов, поэтому уследить трудно. Но есть еще одна хорошенькая книга. Называется Essential Linux Device Drivers.

Ссылка на амазон:
http://www.amazon.com/Essentia... 0132396556

6) Фундаментальный труд по ядру, это конечно же книга - Undestanding the linux kernel,3rd edition (почти 1000 страниц)

на амазоне
http://www.amazon.com/Understa... 0596005652

Все же рекомендую бегло пройтись по Adison.Wesley.Linux.Kernel.Development, ну и по ЦИрюльнику. Вторую я приложил в виде pdf (добрые люди все в один файл собрали)

Если необходимо, могу подкинуть еще ссылок.

PS Есть еще очень хороший сайт
http://eudyptula-challenge.org/
Который высылает вам задание на почту по программированию в ядре, сложность нарастающая, начиная с hello world, заканчивая патчами в РЕАЛЬНОЕ ядро. Многие после прохождения всех заданий, реально получают работу как kernel developer\kernel hacker.
Вложения
Тип файла: pdf KERN-modul-4.95.pdf (1.12 Мб, 8 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2014, 06:35
Помогаю со студенческими работами здесь

Сплайсинг в ядре
Добрый день. Интересует реализация сплайсинга в драйвере ядра, скажем, для функции sys_mkdir. Я знаю, что нужно вписать джамп в начало...

Уязвимости в ядре Linux
В начале апреля в Linux ядре без особой огласки была исправлена уязвимость в SCTP подсистеме, которая позднее была квалифицирована в...

Вопрос о ядре посетителей и тд...
Вот короче говоря начал оптимизировать сайт...)) Траффик растет - за неделю с 45 человек на 90 ( ну сайт мелкий пока что) Но ядро...

Распаралеливание на графическом ядре
Заинтересовался разработкой программ которые могли бы правильно распараллеливаться именно на графическом процессоре. После часового...

TUSB3210 на ядре 8052
Господа, реверсю по тихому устройство EV2300 (в основном используется для проверки батарей на KosGauge от TI), хочу попробовать сделать...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru