Программирование в Linux (Ubuntu) на C\С++

Операционная система Ubuntu давно занимает лидирующие позиции в программном обеспечении суперкомпьютеров, она занимает второе место в сегменте интернет-серверов и стремительно набирает популярность в корпоративном сегменте. Этому способствуют главные преимущества Ubuntu по сравнению с коммерческими операционными системами — высокая экономическая эффективность, мобильность, гибкость, оптимальные условия для установки СУБД. На данном курсе Вы получите знания и навыки, необходимые для разработки программного обеспечения для стремительно набирающей популярность операционной системы Ubuntu. Вы станете понимать процесс сборки ПО и специфики компилятора C/C++ из состава GCC. Вы научитесь разбираться в различиях между процессами и потоками, использовать многопоточность и ее специфики. Вы узнаете, кто такие «демоны» и в чем их отличие от прикладного программного обеспечения.

Для кого:

Этот курс предназначен для специалистов, обладающих базовыми навыками работы с Ubuntu и знаниями языка C\C++, желающих расширить свои знания в программировании в ОС Ubuntu.

Что должен знать слушатель

  • Успешное окончание курса Программирование на языке C (Си) или эквивалентная подготовка.
  • Успешное окончание курса UCP_101 «Администрирование Ubuntu» или эквивалентная подготовка.

Результаты обучения

  • Понимать процесс сборки ПО и специфики компилятора C/C++ из состава GCC
  • Разрабатывать и использовать разделяемые библиотеки
  • Использовать функции файлового ввода-вывода
  • Использовать механизмы обеспечения многозадачности и межпроцессного взаимодействия
  • Использовать файловые и сетевые сокеты
  • Использовать механизм сигналов
  • Разбираться в различиях между процессами и потоками, использовать многопоточность и ее специфики
  • Создавать демонов, понимать различия между демонами и прикладным ПО
  • Понимать специфику консольного ввода-вывода и уметь ее использовать
  • Понимать специфику отображаемых в память файлов и уметь их использовать

Программа обучения

Модуль 1 Введение▼

  • 1.1 Ознакомление со спецификой сборки ПО в GNU/Linux (Ubuntu)
  • 1.2 Ознакомление с консольными текстовыми редакторами (vi,nano,mcedit)
  • 1.3 Ручная и автоматическая сборка ПО (Makefile)
  • 1.4 Модель Клиент-Интерфейс-Сервер (КИС)
  • 1.5 Статическая сборка библиотек
  • 1.6 Совместно используемые библиотеки
  • 1.7 Работа с переменными окружения

Модуль 2 Низкоуровневый ввод-вывод и файловые операции▼

  • 2.1 Обзор механизмов ввода-вывода в Linux (Ubuntu)
  • 2.2 Файловые дескрипторы
  • 2.3 Системные вызовы: open, close, write, read и lseek
  • 2.4 Типы файлов
  • 2.5 Индексные дескрипторы и жесткие ссылки
  • 2.6 Права доступа к файлу
  • 2.7 Файловая система proc
  • 2.8 Два способа прочесть содержимое директории
  • 2.9 Разреженные файлы и специфика их применения
  • 2.10 Блокировка областей файла

Модуль 3 Межпроцессное взаимодействие▼

  • 3.1 Механизмы межпроцессного взаимодействия Linux (Ubuntu)
  • 3.2 Неименованные каналы (pipes)
  • 3.3 Именованные каналы (named pipes)
  • 3.4 Сообщения (message queue)
  • 3.5 Разделяемая память (shared memory)
  • 3.6 Семафоры (semaphores)

Модуль 4 Сокеты▼

  • 4.1 Сокеты в файловом пространстве имен (UNIX-сокеты)
  • 4.2 Парные сокеты (pair sockets)
  • 4.3 Сетевые сокеты (sockets)

Модуль 5 Сигналы▼

  • 5.1 Знакомство с сигналами (signals)
  • 5.2 Отличие сигналов от других механизмов межпроцессного взаимодействия
  • 5.3 Специфика обработки сигналов (signal handling)

Модуль 6 Процессы▼

  • 6.1 Клонирование процессов — fork()
  • 6.2 Замена исполняемого процесса — exec()
  • 6.3 Зомби (zombies) — причины возникновения и способы их устранения

Модуль 7 Потоки▼

  • 7.1 Потоки и процессы
  • 7.2 Специфика построения многопоточных приложений (multithreading)
  • 7.3 Досрочное завершение потока
  • 7.4 Создание обработчика завершения потока
  • 7.5 Средства синхронизации потоков (synchronize primitives)
  • 7.6 Атрибуты потоков

Модуль 8 Демоны (службы)▼

  • 8.1 Отличие демона от консольной утилиты
  • 8.2 Специфика разработки демонов (daemons)
  • 8.3 Создание демона использующего сетевые сокеты

Модуль 9 Консольный ввод-вывод▼

  • 9.1 Специфика разработки консольных приложений
  • 9.2 Предотвращение перенаправления вывода
  • 9.3 Управление терминалом
  • 9.4 Сокрытие пароля пользователя при аутентификации

Модуль 10 Отображаемая память▼

  • 10.1 Отображение обычного файла
  • 10.2 Совместный доступ к файлу
  • 10.3 Частные отображения
  • 10.4 Другие применения mmap

Модуль 11 Домашнее задание▼

  • 11.1 Специфика разработки 64-битных приложений
  • 11.2 Использование библиотеки ncurses
  • 11.3 Программирование графического интерфейса с помощью GTK+