
- •Список сокращений
- •Введение
- •Маршрут разработки программ
- •Компилятор gnu gcc Toolchain
- •Компиляция одного файла
- •Компиляция нескольких файлов
- •Автоматизация сборки
- •Отладка программы
- •Принципы взаимодействия программ и ос
- •Системные вызовы
- •Библиотечные вызовы
- •Запуск и завершение процесса
- •Работа со строками
- •Системные вызовы для работы с файлами и потоками
- •Работа с файлами
- •Работа с потоками ввода-вывода
- •Библиотечные вызовы для работы с файлами и потоками
- •Работа с файлами
- •Работа с потоками ввода-вывода
- •Работа с директориями
- •Упражнения
- •Индивидуальные задания
- •Контрольные вопросы
- •Список литературы
Запустим полученный исполняемый файл и убедимся, что он работает корректно
./sum
Модернизируем программу main.c, чтобы чтение значений аргументов и запись результата вычисления производилась в файл
#include <stdio.h>
#include "sum.h"
#define fileW "fileW.txt"
#define fileR "fileR.txt"
int main(int argc, char *argv[])
{
int a, b, c;
FILE *fW = fopen(fileW, "w");
FILE *fR = fopen(fileR, "r");
fscanf(fR, "%d %d", &a, &b);
c = sum(a, b);
fprintf(fW, "%d + %d = %d\n", a, b, c);
fclose(fR);
fclose(fW);
return 0;
}
Создадим файл fileR.txt и запишем в него значения «1 2». Запустим программу и убедимся, что в созданный автоматически файл fileW.txt была произведена запись «1 + 2 = 3»
Индивидуальные задания
Измените разработанную в п. 1.5 программу таким образом, чтобы в результате была получена разность двух чисел.
Добавьте в разработанную в п. 1.9–1.11 программу функцию вычитания чисел. Вместе с суммой чисел, выведите результат разности на экран.
Контрольные вопросы
Для чего предназначен этап препроцессинга. Какова его роль в общем процессе сборки программы?
Для чего предназначен этап компиляции. Какова его роль в общем процессе сборки программы? В чем отличие этапа компиляции от этапа ассемблирования?
Для чего предназначен этап ассемблирования? Какова его роль в общем процессе сборки программы?
Для чего предназначен этап компоновки? Какова его роль в общем процессе сборки программы? В чем отличие этапа компоновки от этапа ассемблирования?
Как происходит сборка программ, состоящих из нескольких файлов? В чем отличие от компиляции программы из одного файла?
Для чего предназначена утилита GDB?
Что такое системный вызов? В чем отличие системного вызова от библиотечного?
Что такое Makefile? Для каких целей они используются? Опишите особенности работы с ними.
В чем особенности работы с файлами в языке С? Можем ли мы заменить тип FILE на int при открытии файла? Ответ поясните.
В чем особенности работы с потоками ввода/вывода в языке С? Какие стандартные потоки ввода/вывода вам известны? Для чего они предназначены?
Список литературы
CITATION ISO22 \l 1033 : , [1],
CITATION Кер01 \l 1049 : , [2],
CITATION htt22 \l 1033 : , [3],
CITATION IEE22 \l 1033 : , [4],
CITATION IEE18 \l 1033 : , [5],
CITATION Fre22 \l 1033 : , [6],
CITATION Ахо20 \l 1049 : , [7],
CITATION Fre19 \l 1033 : , [8],
CITATION Fre221 \l 1033 : , [9],
CITATION sys22 \l 1033 : , [10],
CITATION Ope22 \l 1033 : , [11],
[1] |
ISO/IEC, «Programming languages — C,» [В Интернете]. Available: https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf. [Дата обращения: 2022]. |
[2] |
Р. Д. Керниган Б., Язык программирования Си, СПб.: Невский диалект, 2001. |
[3] |
https://github.com/torvalds/linux, «GitHub,» [В Интернете]. Available: https://github.com/torvalds/linux. [Дата обращения: 2022]. |
[4] |
I. C. Society, «IEEE P1003.1 Draft | Portable Operating System Interface (POSIX),» [В Интернете]. Available: https://www.open-std.org/jtc1/sc22/open/n4217.pdf. [Дата обращения: 2022]. |
[5] |
I. a. T. O. Group, «The Open Group Base Specifications Issue 7, 2018 edition | errno,» 2018. [В Интернете]. Available: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html. [Дата обращения: 2022]. |
[6] |
I. V. Free Software Foundation, «GCC, the GNU Compiler Collection,» 2022. [В Интернете]. Available: https://gcc.gnu.org/. [Дата обращения: 2022]. |
[7] |
А. А. В., Компиляторы. Принципы, технологии и инструментарий, Вильямс, 2020. |
[8] |
I. Free Software Foundation, «Make - GNU Project,» 2019. [В Интернете]. Available: https://www.gnu.org/software/make/. [Дата обращения: 2022]. |
[9] |
I. Free Software Foundation, «GDB: The GNU Project Debugger,» 2022. [В Интернете]. Available: https://www.sourceware.org/gdb/. [Дата обращения: 2022]. |
[10] |
«syscalls(2) — Linux manual page,» [В Интернете]. Available: https://man7.org/linux/man-pages/man2/syscalls.2.html. [Дата обращения: 2022]. |
[11] |
OpenNET, «MAN fscanf (3),» [В Интернете]. Available: https://www.opennet.ru/man.shtml?topic=fscanf&category=3&russian=0. [Дата обращения: 2022]. |