ЛР.2. Posix-программирование, копирование, перемещение, удаление файлов, создание ссылок.

Задание

Создать утилиту cml (упрощенный аналог утилит cp, mv, ln) для копирования/перемещения файлов и создания ссылок. Общий вид:
 cml [-h|-l|-m] исходный_файл результирующий_файл
Поведение утилиты:
  1. Если синтаксис вызова утилиты неверен (отсутствуют один или оба обязательных параметра, обязательных параметров больше двух, используются несуществующие опции) - сообщить об этом, вывести краткую справку и остановить программу.
    Примеры верного синтакиса:
    cml -h 1 2
    cml 123 456.txt
    cml -h -l -x
    cml -h -l
    
    Примеры НЕверного синтакиса:
    cml -k 123 456.txt
    cml 1 2 3 4
    cml
    cml -l
    
  2. Если исходный файл не существует - сообщить об этом и остановить программу.
  3. Если исходный файл существует, но не является регулярным файлом или ссылкой - сообщить об этом и остановить программу.
  4. Если результирующий файл существует, но не является регулярным файлом или ссылкой - сообщить об этом и остановить программу.
  5. Если результирующий файл не существует, то утилита либо копирует исходный файл, либо перемещает/переименовывает исходный файл (-m), либо создает жесткую ссылку (-h), либо создает символическую ссылку (-l)
  6. Если результирующий файл существует и является регулярным файлом или ссылкой, следует запросить у пользователя разрешение на удаление. При положительном ответе - удалить файл и далее работать по предыдущему варианту. При отрицательном - остановить программу с соответствующим сообщением.