В данной статье мы рассмотрим командный интерпретатор с конвейером(pipe), возможностью перенаправления ввода/вывода, и обработкой сигнала на примере SIGINT(CTRL+C). Объем работы: Для начала разобьём исходную задачу на несколько подзадач: 1.0 Считывание строки. Будем считывать строку посимвольно. Выделяем память используя malloc, проверяем успешность выполнения и пока не встретится EOF или \0 будем посимвольно писать в буфер строку. Если место в буфере закончилось используем realloc для расширения. 1.1 Пробелы. Сейчас наша строка может содержать избыточное количество пробелов, например: " ls | wc " или наоборот: "ls|wc", в любом случае оболочка должна обрабатывать эти случаи корректно. Таким образом нужно скорректировать строку так, чтобы между двумя словами был ровно один пробел. Реализовано это сжатием строки т.е. удалением лишних пробелов, а затем расстановкой где необходимо. Теперь добавим пробелы между '|': 2.0 Разделение строки. Теперь когда ст