ЛР 1.
Компиляция и сборка, ввод-вывод, обработка буфера ограниченного размера

Задания

  1. (20) Данное задание следует выполнять в терминале ОС Linux, на узле с архитектурой x86-64, с установленым пакетом GCC, содержащим компилятор языка Си.

    Cоздать программу вывода на экран константной строки (5-10 символов). Создать исполняемый файл из программы консольным компилятором cc в один этап, запустить и проверить корректность работы. Быть готовым продемонстрировать одноэтапный процесс создания исполняемого файла.

    Создать исполняемый файл из программы в 3 отдельных этапа: препроцессинг, компиляция, сборка. Каждый последующий этап должен использовать результаты работы предыдущего. Препроцессор cpp получает на вход файл с исходным кодом программы, на выходе генерирует исходный код с раскрытыми директивами препроцессора. Компилятор cc получает на вход результат работы препроцессора и генерирует объектный файл с машинным кодом и расширением .o. Сборщик ld получает на вход результат работы компилятора, вспомогательные объектные файлы, генерирующие точку входа в программу (/usr/lib64/crt1.o) секцию инициализации (/usr/lib64/crti.o) и секцию завершения (/usr/lib64/crtn.o) программы, подключает стандартную библиотеку Си libc.so опцией -lc и применяет механизм динамической сборки опцией -I/lib64/ld-linux-x86-64.so.2. Результат работы сборщика - исполняемый файл, которые следует запустить и убедится в корректности его работы. Быть готовым продемонстрировать трехэтапный процесс создания исполняемого файла.

  2. (60+20) На стандартный ввод подается строка, представляющая собой корректную формулу сложения и вычитания натуральных чисел, например: 1+231-764+0-7377-1-1. В строке имеется минимум одна операция, каждое значение не превышает 232-1, размер строки заранее неизвестен. Разработать программу получения результата выражения с выводом на стандартный поток вывода. Разрешенный размер буфера чтения (если он требуется) - от 3 до 20 байтов.

    (30)Разработать программу с использованием функций getchar для чтения и putchar - для вывода данных. Буфер чтения опционален.

    (10)Разработать программу с использованием функций scanf для чтения и printf - для вывода данных. Буфер чтения опционален.

    (20)Разработать программу с использованием функций fgets для чтения и fputs - для вывода данных. В качестве файловых переменных использовать предопределенные переменные stdin и stdout. Буфер чтения обязателен. Размер буфера фиксируется константой. При проверке решения преподаватель может изменять значение константы в пределах, заявленных в условии задачи.

    Быть готовым к разъяснению исходного кода каждой разработанной программы в отсутствии комментариев.

    Для проверки можно воспользоваться программой gen (создание строки-выражения), и программой getputc (рассчет выражения, безбуферный, getchar и putchar). После загрузки программам следует установить бит исполняемости для обеспечения возможности их запуска. Программы можно запускать как по отдельности, так и в конвеере, например: ./gen 5 | ./getputc. Программы предназначены для запуска в терминале ОС Linux, на узле с архитектурой x86-64.