by Jan Malakhovski
README
, в главном бранче репозитория быть не должно.Смотрите предыдущий год.
Требуется реализовать утилиту, читающую свой стандартный ввод построчно и выводящую каждую строку длины меньше некоторой константы k
в стандартный вывод дважды подряд.
Совсем формально.
где k
— константа, задаваемая снаружи, а на вход этому терму подаётся входной поток (stdin).
Менее формально с техническими подробностями.
k ≡ argv[1]
) выводить в выходной поток дважды.libc
, а из последней нельзя использовать никаких функций кроме malloc
, memcpy
, memmove
, atoi
и врапперов системных вызовов read
и write
.read
должно производиться, когда это технически возможно, по (k + c - len)
байт, где c
— константа из множества {-1, 0, 1}
, len
— длина занятого куска буфера. Когда это технически невозможно, то (k + c - len)
байт может быть считано в два захода.Формальные требования к неформальному описанию.
В точности задание выше, решенное при помощи синхронного read(2)
. Заметье, что оно чуть-чуть отличается от того, что я говорил на паре: k
не define
, а аргумент.
/dupme/main.c
— реализация./dupme/Makefile
— скрипт сборки./dupme/main
должно сгенерировать
123
123
пауза в 5 секунд
321
321
123
123
Требуется реализовать несколько простых утилит на bash. Все они должны учитывать, что в именах файлов могут встречаться пробелы.
Утилита интерактивного переименовывания файлов. Тот факт, что в именах файлов могут встречаться переводы строк, в этой утилите можно не учитывать. Запускаете её, например:
а она по очереди выводит на консоль имена файлов подходящих под *.txt
и даёт их интерактивно поредактировать. После редактирования соответствующий файл в соответствущей ему директории переименовывается в новое имя.
/simple-bash/renamer
— утилита./BUILTIN<Return>
, потом держать до упора n
, /^\s*read
, потом несколько раз n
.Утилита слежения за чем-то. Следует учитывать¸ что в аргументах могут встречаться пробелы и переводы строк. Запускаете её, например:
а она должна каждую секунду (1
) печатать на консоль вывод команды, записанной в остальных аргументах (ps u
) и выводить unified diff между текущим и предыдущим наблюдаемым состоянием (или ничего, если оно не поменялось).
/simple-bash/watchthis
— утилита."$@"
и man diff.Утилита, которая обходит дерево файловой системы начиная с указанных точек и выводит все битые симлинки. Следует учитывать¸ что в аргументах и именах файлов могут встречаться пробелы и переводы строк. Запускаете её, например:
а она делает то, что написано в предыдущем предложении, рекурсивно обходя дерево виртуальной файловой системы. Рекурсивный обход должен быть написан на bash, без использования утилит типа find
или ls
.
/simple-bash/brokensymlinks
— утилита./nullglob
.Странслируйте watchthis
или (или
, не xor
) brokensymlinks
руками в программу на C
.
/simple-bash/${util}.c
— транслированная утилита.Смотрите предыдущий год начиная с Midterm #1.