Задание 5 (индивидуальное): обработка двоичных файлов в POSIX

Указания:

  • Программа должна получать входные данные (имена файлов и. т. д.) через аргументы командной строки.
  • При необходимости результат должен выводиться в стандартный поток вывода.
  • Работа с файлами должна осуществляться средствами API POSIX.
  • Чтение/запись файлов должна осуществляться посредством буферов фиксированного размера, в целях отладки его стоит выбирать небольшим (10 - 20 байт) — если в задании не указано, что файл должен отображаться в память..

Варианты

  1. Сравнить содержимое двух файлов: вывести номер позиции первого отличия (байты не совпадают по значению, один из файлов закончился) и значения отличающихся байтов.
  2. Вычислить "контрольную сумму" файла: байт, являющийся результатом выполнения побитовой операции "исключающее или" для всех байт файла.
  3. Зашифровать содержимое файла с записью в другой файл. Шифрование должно выполняться при помощи побитовой операции "исключающее или" каждого исходного байта с соответствующим байтом заданного ключа (строки) некоторой длины, повторенного при необходимости нужное количество раз. Полученный файл расшифровывается тем же алгоритмом.
  4. Определить количество вхождений в файл заданного байта.
  5. Скопировать содержимое файла в другой, пропуская байты с заданным значением.
  6. Скопировать содержимое файла в другой в обратном порядке.
  7. Скопировать содержимое файла в другой с "циклическим сдвигом" содержимого на заданное количество байт влево: сначала скопировать содержимое файла с заданной позиции до конца, затем дописать начало файла до этой позиции.
  8. Найти в файле наиболее длинную последовательность из подряд идущих одинаковых символов. Вывести индекс её начала, длину и символ. Решить задачу с помощью отображения файлов в память.
  9. Скопировать в заданный файл конкатенацию содержимого двух других файлов. Решить задачу с помощью отображения файлов в память.
  10. Определить количество вхождений каждого возможного значения байта (0 - 255) в заданный файл. Вывести информацию только о байтах с ненулевым количеством вхождений. Решить задачу с помощью отображения файлов в память.
  11. Реализовать в заданном файле циклический сдвиг содержимого на заданное количество байт влево/вправо. Решить задачу с помощью отображения файлов в память.
  12. Зашифровать содержимое файла с перезаписью результата в тот же файл. Шифрование должно выполняться при помощи побитовой операции "исключающее или" каждого исходного байта с соответствующим байтом заданного ключа (строки) некоторой длины, повторенного при необходимости нужное количество раз. Полученный файл расшифровывается тем же алгоритмом. Решить задачу с помощью отображения файлов в память.
  13. Найти в заданном файле все вхождения заданной строки. Вывести позиции начала каждого вхождения и содержимое файла, начиная с этой позиции.
  14. Найти в заданном файле последнее вхождение заданной строки. Вывести позиции начала каждого вхождения и содержимое файла, начиная с этой позиции. Решить задачу с помощью отображения файлов в память.
  15. Определить, является ли содержимое заданного файла палиндромом.
  16. Определить, является ли содержимое заданного файла палиндромом. Решить задачу с помощью отображения файлов в память.
  17. Поместить содержимое заданных файлов в простой файл-«архив». В начале файла должно находиться целое число — количество файлов, после него — имя первого файла в виде строки, заканчивающейся нулём, затем размер файла (64-битное число), затем содержимое файла.
  18. Поместить содержимое заданных файлов в простой файл-«архив». В начале файла должно находиться целое число — количество файлов, после него — имя первого файла в виде строки, заканчивающейся нулём, затем размер файла (64-битное число), затем содержимое файла. Решить задачу с помощью отображения файлов в память.