Linux. Уровень 2. Программирование в Linux на C
О чём курс
О курсе
Язык C служит основой для разработки программного обеспечения и архитектуры системных служб операционной системы Linux. Занятия охватывают низкоуровневые механизмы системы, принципы компиляции и управление системными ресурсами, а также включают работу с процессами, потоками и файловыми подсистемами.
Программа разработана в соответствии с требованиями профессионального стандарта «Программист». Материал курса позволяет сформировать системное понимание архитектуры Linux, которое можно применять при создании серверного и системного софта для корпоративного сектора, суперкомпьютеров и серверных платформ.
Чему вы научитесь
Слушатели курса изучают широкий спектр задач системного программирования. В ходе обучения осваиваются следующие практические навыки:
- понимание процесса сборки программного обеспечения и специфики компилятора C из состава GCC;
- создание статических и разделяемых библиотек, автоматизация сборки с помощью утилиты make;
- низкоуровневый файловый ввод-вывод, работа с файловыми дескрипторами и специальными файловыми системами;
- реализация параллельных вычислений и понимание ключевых различий между процессами и потоками execution;
- настройка многопоточности и применение примитивов синхронизации данных;
- использование механизмов, обеспечивающих межпроцессное взаимодействие в Linux;
- сетевое и локальное взаимодействие программ через файловые и сетевые сокеты;
- перехват и корректная обработка сигналов операционной системы;
- проектирование и запуск фоновых системных служб — демонов;
- управление терминалом, консольный ввод-вывод и сокрытие ввода паролей;
- работа с виртуальной памятью и отображаемые в память файлы через системный вызов mmap.
Что внутри
Теоретический и практический материал курса разбит на тематические блоки, охватывающие ключевые подсистемы ОС. Изучение начинается с базовых инструментов сборки, работы с переменными окружения и текстовыми редакторами. Далее подробно рассматриваются системные вызовы для работы с файлами, правами доступа и блокировками.
Значительная часть курса отведена параллельному программированию и коммуникации. Рассматриваются механизмы IPC: неименованные и именованные каналы, очереди сообщений, разделяемая память и семафоры. Слушатели разбирают жизненный цикл процессов, включая системные вызовы fork и exec, устранение зомби-процессов, а также управление атрибутами потоков и завершением их работы.
Отдельные модули посвящены созданию демонов, сетевому взаимодействию и дополнительным технологиям: разработке 64-битных приложений, созданию псевдографики с библиотекой ncurses и графического интерфейса с GTK+.
Окружение и применимость знаний
Практическая часть курса демонстрируется на дистрибутиве Linux Mint 22.3 «Zena» (ядро версии 2024 года). При этом изучаемые системные вызовы, интерфейсы POSIX и стандарты компиляции универсальны. Полученные знания позволяют разрабатывать программные решения под любые современные дистрибутивы Linux, включая Debian 12, Red Hat 9, Alt Linux 10.3, OpenSUSE 15 и другие.
Программа обучения
- Модуль 1. Введение (2,5 ак. ч.)
- Ознакомление со спецификой сборки ПО в GNU/Linux (версия 2024)
- Ознакомление с консольными текстовыми редакторами (vi,nano,mcedit)
- Ручная и автоматическая сборка ПО (Makefile)
- Модель Клиент-Интерфейс-Сервер (КИС)
- Статическая сборка библиотек
- Совместно используемые библиотеки
- Работа с переменными окружения
- Модуль 2. Низкоуровневый ввод-вывод и файловые операции (2,5 ак. ч.)
- Обзор механизмов ввода-вывода в Linux
- Файловые дескрипторы
- Системные вызовы: open, close, write, read и lseek
- Типы файлов
- Индексные дескрипторы и жесткие ссылки
- Права доступа к файлу
- Файловая система proc
- Два способа прочесть содержимое директории
- Разреженные файлы и специфика их применения
- Блокировка областей файла
- Модуль 3. Межпроцессное взаимодействие (3 ак. ч.)
- Механизмы межпроцессного взаимодействия Linux
- Неименованные каналы (pipes)
- Именованные каналы (named pipes)
- Сообщения (message queue)
- Разделяемая память (shared memory)
- Семафоры (semaphores)
- Модуль 4. Сокеты (2,5 ак. ч.)
- Сокеты в файловом пространстве имен (UNIX-сокеты)
- Парные сокеты (pair sockets)
- Сетевые сокеты (sockets)
- Модуль 5. Сигналы (3 ак. ч.)
- Знакомство с сигналами (signals)
- Отличие сигналов от других механизмов межпроцессного взаимодействия
- Специфика обработки сигналов (signal handling)
- Модуль 6. Процессы (2,5 ак. ч.)
- Клонирование процессов — fork()
- Замена исполняемого процесса — exec()
- Зомби (zombies) — причины возникновения и способы их устранения
- Модуль 7. Потоки (2,5 ак. ч.)
- Потоки и процессы
- Специфика построения многопоточных приложений (multithreading)
- Досрочное завершение потока
- Модуль 8. Потоки (продолжение) (3 ак. ч.)
- Создание обработчика завершения потока
- Средства синхронизации потоков (synchronize primitives)
- Атрибуты потоков
- Модуль 9. Демоны (службы) (3 ак. ч.)
- Отличие демона от консольной утилиты
- Специфика разработки демонов (daemons)
- Создание демона использующего сетевые сокеты
- Модуль 10. Консольный ввод-вывод (2,5 ак. ч.)
- Специфика разработки консольных приложений
- Предотвращение перенаправления вывода
- Управление терминалом
- Сокрытие пароля пользователя при аутентификации
- Модуль 11. Отображаемая память (2,5 ак. ч.)
- Отображение обычного файла
- Совместный доступ к файлу
- Частные отображения
- Другие применения mmap
- Модуль 12. Домашнее задание (2,5 ак. ч.)
- Специфика разработки 64-битных приложений
- Использование библиотеки ncurses
- Программирование графического интерфейса с помощью GTK+
Теги курса
Другие материалы автора 6
ИС Игорь Седых Все материалыОтзывов пока нет. Будьте первым!
Этот курс сейчас в процессе организации складчины. Нажмите кнопку «Записаться» и ожидайте старта — вам придёт уведомление. Когда складчина стартует, в карточке курса будет указан актуальный взнос. Текущая цена пока в процессе формирования и может отличаться от финальной.
Да, мы стремимся, чтобы финальный взнос был не больше ≈10% от оригинальной цены курса. Чем больше участников записывается в складчину, тем ниже выходит взнос для каждого.
Нажмите кнопку «Записаться» и авторизуйтесь на сайте через email (через ту же почту, которую будете использовать для входа). В личном кабинете вас будут ждать инструкции, как пригласить других участников — чем больше людей записалось, тем быстрее стартует складчина и тем ниже взнос. Как только складчина готова к приобретению, вам придёт уведомление.