OS 2013

General

Useful code snippets

See the previous year.

Homework 2

Требуется реализовать утилиту, читающую свой стандартный ввод построчно и выводящую каждую строку длины меньше некоторой константы k в стандартный вывод дважды подряд.

Часть первая

В точности задание выше, решенное при помощи синхронного read(2). Заметье, что оно чуть-чуть отличается от того, что я говорил на паре: k не define, а аргумент.

Минимальная проверка формальных требований к неформальному описанию

{ echo -ne "123\n321" ; sleep 5 ; echo -ne '\n1234\n123' } | ./dupme/main 3

должно сгенерировать

123
123
пауза в 5 секунд
321
321
123
123

Homework 3

Требуется реализовать несколько простых утилит на bash. Все они должны учитывать, что в именах файлов могут встречаться пробелы.

Часть первая

Утилита интерактивного переименовывания файлов. Тот факт, что в именах файлов могут встречаться переводы строк, в этой утилите можно не учитывать. Запускаете её, например:

renamer *.txt

а она по очереди выводит на консоль имена файлов подходящих под *.txt и даёт их интерактивно поредактировать. После редактирования соответствующий файл в соответствущей ему директории переименовывается в новое имя.

Часть вторая

Утилита слежения за чем-то. Следует учитывать¸ что в аргументах могут встречаться пробелы и переводы строк. Запускаете её, например:

watchthis 1 ps u

а она должна каждую секунду (1) печатать на консоль вывод команды, записанной в остальных аргументах (ps u) и выводить unified diff между текущим и предыдущим наблюдаемым состоянием (или ничего, если оно не поменялось).

Часть третья

Утилита, которая обходит дерево файловой системы начиная с указанных точек и выводит все битые симлинки. Следует учитывать¸ что в аргументах и именах файлов могут встречаться пробелы и переводы строк. Запускаете её, например:

brokensymlinks /usr/lib*

а она делает то, что написано в предыдущем предложении, рекурсивно обходя дерево виртуальной файловой системы. Рекурсивный обход должен быть написан на bash, без использования утилит типа find или ls.

Часть четвёртая

Странслируйте watchthis или (или, не xor) brokensymlinks руками в программу на C.