Задания. Модуль 1 - Nasturtium/myLinux GitHub Wiki
001 Динамическая линковка
Разработать программу "Hello , World!", печатающую приветствие на консоли. Функцию печати поместить в отдельную динамическую библиотеку (shared object, .so)
002 Чтение переменных окружения
Разработать программу, выводящую на экран значение теекущего каталога из которого запущена программа, с использованием чтения переменных окружения из массива, передаваемого в функцию main или с использованием функции getenv
003 Загрузка динамических библиотек в runtime с libdl
Для программы, зазработанной в 001, заменить линамическую линковку функции печати из разделяемой библиотеки на загрузку в runtime. Выполнить задание с использованием библиотеки libdl. (См. функции dlopen, dlsym).
004 Построение дерева процессов
Пользуясь информацией, размещенной в файловой системе /proc прочитать и вывести на консоль информацию о дереве процессов в системе.
(!) Важно: корректно обрабатывать ситуации, в которых отсутствуют права на чтение содержимого файлов и каталогов.
Программа должна принимать на входе 1 параметр с идентификатором процесса, для которого строится список родителей.
(*) Если параметр отсутствует, то необходимо вывести дерево для всех процессов в системе, к информации о которых у пользователя есть доступ.
005 Shell
Разаботать командный интерпретатор, обладающий следующими чертами:
запуск процессов, набранных пользователем в командной строке в отличие от стандартного командного интерпретатора, поиск исполняемых файлов производится не только в переменной PATH, но и в текущем каталоге выход из интерпретатора должен осуществляться по Ctrl-C, перед выходом, командный интерпретатор должен напечатать на экране "Goodbye" (обработчик сигнала SIGTERM долженбыть перегружен).
006 mykill
Разработать программу отправляющую конкретный сигнал заданному процессу. Формат вызова:
./mykill 1231 15 где первый параметр -- идентификатор процесса, второй параметр -- десятичный номер сигнала.
007 summator
Разработать приложение с использованием pthreads для вычисления в многопоточном режиме интеграла функции y=sin(x) на интервале [0..N] Программа должна принимать 2 аргумента N и n обоззначающие соответвенно:
N - правая граница интервала n - количество потоков
008 thread list
Разработать программу выводящую список потоков процесса заданного в качестве аргумента.
009 pipe readers
Разработать программу, которая читает вывод консольной программы переданной ей в качестве аргумента, и выводит на консоль инвертированные строки.
010 tie-tie
Разработать программу, которая может встраиваться в цепочку вызовов proc1 | tie-tie string filename | proc2 |... , подсчитывать количество вхождений строки string, и выводить это значение в файл filename
011 pipe chat
Разработать программу, реализующую функцию чата для двух взаимодействующих процессов. Программа должна иметь следующий формат вызова:
./mychat pipein pipeout Для передачи сообщений должен использоваться механизм именованных каналов. Если при запуске программы, указанные в качестве тринспорта каналы не существуют, то они должны быть созданы.
012 readers/writers
Реализовать многопоточную программу выполняющую конкурентную запись/чтение данных в контейнер (vector) в памяти с периодическим выводом количества элементов на консоль.
Формат вызова
./rwqueue writers readers max Где:
writers - количество писателей readers - количество читателей max - максимальное количество элементов в контейнере Выход из программы должен осуществляться с корректным завершением всех потоков по нажатию Ctrl+C
013 udp echo
Реализовать функции чат-программы разработанной в 011 заменив транспортный уровень на протокол UDP, работающий на локальном адресе.
Формат вызова
./udpchat localport remoteport
014 broadcast
Разработать программу реализующую групповой чат в рамках локальной сети на основе броадкаст сообщений.
015 tcp chat
Разработать приложения чат-клиента и чат-сервера, обеспечивающих следующие функции:
Сервер:
подключение и отключение клиентов отправка списка подключенных клиентов по запросу в клиентское приложение Хранение общего списка сообщений отображение событий подключений/отключений Клиент:
подключение к серверу отключение от сервера отправка сообщений в общий чат получение последних N сообщений с сервера Формат вызова:
myserver port name myclient ip-address port name
016 static http
Реализовать статический web сервер, отдающий в качестве index.html страницу с именем автора и его фотографией, и корректно обрабатывающий ситуацию HTTP 404