Skip to content

Punisher97/Task_4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Task_4 – Алексей Щербаков

📌 Описание

Проект реализует набор базовых Unix-утилит на языке C. Каждая программа находится в отдельном .c-файле и собирается в отдельный исполняемый файл, полностью повторяя ключевое поведение оригинальных команд Linux.

Реализованы:

  • echo — вывод аргументов, поддержка флага -n
  • pwd — печать текущего каталога (getcwd)
  • ls — вывод содержимого каталога (флаги -l, -g, -R)
  • cp — копирование файлов (низкоуровневые open/read/write, копирование прав)
  • wc — подсчёт строк, слов, символов
  • cat — вывод содержимого файлов

Проект выполнен в рамках домашнего задания №4 курса «Практикум на ЭВМ 2025/2026».


📁 Структура проекта

Task_4/
│
├── echo.c   # Реализация echo (-n)
├── pwd.c    # getcwd + perror
├── ls.c     # ls -l -g -R, long format, major/minor
├── cp.c     # cp с проверкой cp f f, копирование прав
├── wc.c     # wc: строки / слова / символы
└── cat.c    # cat для нескольких файлов

🛠️ Компиляция

Требуется GCC:

gcc echo.c -o echo
gcc pwd.c  -o pwd
gcc ls.c   -o ls
gcc cp.c   -o cp
gcc wc.c   -o wc
gcc cat.c  -o cat

▶️ Запуск

echo

./echo hello world
./echo -n "no newline"

pwd

./pwd

ls

./ls
./ls -l
./ls -lg
./ls -lR dir

cp

./cp file copy
./cp f f            # корректная ошибка: один и тот же файл

wc

./wc file.txt
./wc file1 file2

cat

./cat file.txt
./cat file1 file2

📘 Описание утилит

echo

  • выводит аргументы через пробел;
  • флаг -n отключает перевод строки;
  • поведение соответствует POSIX-реализации.

pwd

  • выводит абсолютный путь к текущему каталогу;
  • использует getcwd() и корректную обработку ошибок.

ls

Поддерживаемые флаги:

Флаг Описание
-l длинный формат (rwx, владелец, размер, тип файла)
-g показывать группу владельца
-R рекурсивный обход директорий

Особенности:

  • определение типа файла (d, -, l, c, b, s);
  • вывод прав доступа (rwxrwxrwx);
  • поддержка устройств через major() и minor();
  • поддержка символических ссылок (readlink);
  • использование opendir, readdir, lstat, getpwuid, getgrgid.

cp

Полностью низкоуровневая реализация:

  • чтение через open(O_RDONLY) и read();
  • запись через open(O_CREAT|O_TRUNC) и write();
  • копирование прав:
st_src.st_mode & 07777
  • защита от случая:
cp f f

(проверка st_dev и st_ino);

  • копирование внутрь каталога (dir/file).

wc

Считает:

  • количество строк (\n),
  • количество слов (по переходам isspace),
  • количество символов (по всем прочитанным байтам).

Поддерживает ввод нескольких файлов.


cat

  • выводит содержимое файлов;
  • поддерживает несколько аргументов;
  • корректно обрабатывает ошибки открытия.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages