
- •СОДЕРЖАНИЕ
- •КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
- •Теоретическая часть
- •Порядок выполнения работы
- •Теоретическая часть
- •Порядок выполнения работы
- •Варианты индивидуальных заданий
- •Порядок выполнения работы
- •Варианты индивидуальных заданий
- •Теоретическая часть
- •Порядок выполнения работы
- •Теоретическая часть
- •Порядок выполнения работы
- •Варианты индивидуальных заданий
- •ЛИТЕРАТУРА
- •Основная
com n |
|
|
|
|
|
|
|
|
||
; ; |
|
|
|
|
|
|
|
|
|
|
*) |
|
|
|
// default |
|
|
|
|
||
com 1 |
|
|
|
|
|
|
|
|
||
… |
|
|
|
|
|
|
|
|
|
|
com n |
|
|
|
|
|
|
|
|
||
; ; |
|
|
|
|
|
|
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
|
Функция пользователя: fname2 (arg1,arg2...argN) |
|
|
||||||||
{ |
|
|
|
|
|
|
|
|
|
Р |
commands |
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
Организация циклов: |
|
|
|
|
|
|||||
1. for |
var1 in list |
|
|
|
|
У |
||||
do |
|
|
|
|
|
Г |
И |
|||
com1 |
|
|
|
|
|
|||||
… |
|
|
|
|
|
|
||||
com n |
|
|
|
|
|
|
||||
done |
|
|
|
|
|
|
||||
2. while |
|
exp |
|
|
|
|
|
Б |
|
|
|
|
|
|
|
|
|
|
а |
|
|
|
com1 |
|
|
|
|
к |
|
|
||
|
… |
|
|
|
е |
|
|
|
||
|
com n |
|
т |
|
|
|
|
|||
|
end |
… |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
3. until |
|
exp |
|
|
// аналог do-while |
|
|
|||
|
do |
|
о |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
com1 |
и |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
л |
|
|
|
|
|
|
|
|
|
com n |
|
|
|
|
|
|
|
||
|
done |
|
|
|
|
|
|
|
|
|
пи |
|
|
Порядок выполнения работы |
|
|
|||||
|
|
|
|
|
|
|
|
|
||
Б |
|
|
|
|
|
|
|
|
|
|
1. Изучбть теоретическую часть лабораторной работы. |
|
|||||||||
2. На |
сать скрипт, |
выводящий на консоль и в файл все аргументы ко- |
мандной строки.
3. Написать скрипт, выводящий в файл (имя файла задается пользовате- лем в качестве первого аргумента командной строки) имена всех файлов с за- данным расширением (третий аргумент командной строки) из заданного ката- лога (имя каталога задается пользователем в качестве второго аргумента ко- мандной строки).
4. Написать скрипт, компилирующий и запускающий программу (имя ис- ходного файла и exe-файла результата задается пользователем в качестве аргу-
13
ментов командной строки). В случае ошибок при компиляции вывести на кон- соль сообщение об ошибках и не запускать программу на выполнение.
Варианты индивидуальных заданий
1.Написать скрипт для поиска файлов заданного размера в заданном ка- талоге (имя каталога задается пользователем в качестве третьего аргумента командной строки). Диапазон (min – max) размеров файлов задается пользова- телем в качестве первого и второго аргументов командной строки.
2.Написать скрипт с использованием цикла for, выводящийРна консоль размеры и права доступа для всех файлов в заданном каталоге и всех его подка- талогах (имя каталога задается пользователем в качестве первогоИаргумента ко- мандной строки). У
3.Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех его подкаталогахГ(строка и имя каталога за- даются пользователем в качестве первого и Бвторого аргументов командной строки). На консоль выводятся полный путь и имена файлов, в содержимом ко-
торых присутствует заданная строка, и их размер. Если к какому-либо каталогу нет доступа, необходимо вывести соответсвующееа сообщение и продолжить выполнение. к
4.Написать скрипт поискаеодин овых по содержимому файлов в двух каталогах, например Dir1 и Dir2. Пользователь задает имена Dir1 и Dir2 в каче- стве первого и второго аргументов командной строки. В результате работы программы файлы, имеющиеся в Dir1, сравниваются с файлами в Dir2 по их содержимому. На экрановыв дя ся число просмотренных файлов и результаты сравнения. и
5.Написать скр пт, нах дящий в заданном каталоге и его подкаталогах все файлы, в ладе ьцем которых является заданный пользователь. Имя владель- ца и каталогбзадаются пользователем в качестве первого и второго аргументов командной строки. Скрипт выводит результаты в файл (третий аргумент ко- манднойистроки) в следующем виде: полный путь, имя файла, его размер. На консольБвыводится общее число просмотренных файлов.
6.Написать скрипт, находящий в заданном каталоге и его подкаталогах все файлы заданного размера (имя каталога задается пользователем в качестве первого аргумента командной строки). Диапазон (min – max) размеров файлов
задается пользователем в качестве второго и третьего аргументов командной строки. Скрипт выводит результаты поиска в файл (четвертый аргумент ко- мандной строки) в следующем виде: полный путь, имя файла, его размер. На
консоль выводится общее число просмотренных файлов.
7. Написать скрипт, подсчитывающий суммарный размер файлов в задан- ном каталоге и всех его подкаталогах (имя каталога задается пользователем в ка-
14

честве первого аргумента командной строки). Скрипт выводит результаты под- счета в файл (второй аргумент командной строки) в следующем виде: каталог (полный путь), суммарный размер файлов, число просмотренных файлов.
Лабораторная работа №3
ОСНОВНЫЕ ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ В ОС LINUX
Цель работы: изучить файловую систему ОС Linux и основных функций
для работы с каталогами и файлами.
Каталоги в ОС Linux – это особые файлы. Для открытия или закрытияР |
ка- |
талогов существуют вызовы: |
|
|
|
|
|
И |
|||
#include <dirent.h> |
|
|
|
|
|
|
|||
DIR *opendir (const char *dirname); |
|
|
У |
||||||
int closedir( DIR *dirptr); |
|
|
|
|
|||||
|
|
|
Г |
|
|||||
Для чтения записей каталога существует вызов: |
|
||||||||
struct dirent *readdir(DIR *dirptr); |
|
Б |
|
|
|||||
Структура dirent такова: |
|
|
|
|
|
|
|||
struct dirent { |
|
|
|
|
а |
|
|
||
|
long |
d_ino; |
|
|
|
||||
|
off_t |
|
d_off; |
|
|
|
|||
|
|
к |
|
|
|
||||
|
|
|
|
|
|
|
|
||
|
unsigned short d reclen; |
|
|
|
|||||
|
char |
|
d name [1]; |
|
|
|
|
||
|
}; |
|
|
е |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Поле d_ino – это чис |
, к орое уникально для каждого файла в файловой |
||||||||
системе. Значением п ля d |
offтслужит смещение данного элемента в реальном |
||||||||
каталоге. Поле d name есть начало массива символов, задающего имя элемента |
|||||||||
|
|
ло |
|
|
|
|
|
|
|
каталога. Данное мя граничено нулевым байтом и может содержать не более |
|||||||||
MAXNAMLEN симвиов. Тем самым описываемая структура имеет перемен- |
|||||||||
ную длину, хранящуюся в поле d_reclen. |
|
|
|
|
|||||
|
ол |
|
|
|
|
|
|
|
|
П мер вызова: |
|
|
|
|
|
|
|
|
|
DIR *dp;б |
|
|
|
|
|
|
|
|
|
struct dirent *d; |
|
|
|
|
|
|
|
|
|
ри |
|
|
|
|
|
|
|
|
|
d=readdir(dp); |
|
|
|
|
|
|
|
|
|
При первом вызове функции readdir в структуру dirent будет считана |
|||||||||
Б |
|
|
|
|
|
|
|
|
|
первая запись каталога. После прочтения всего каталога в результате после- |
дующих вызовов readdir будет возвращено значение NULL. Для возврата ука- зателя в начало каталога на первую запись существует вызов:
void rewindir(DIR *dirptr);
Чтобы получить имя текущего рабочего каталога, используется функция: char *getcwd(char *name, size_t size);
15
Порядок выполнения работы
1.Изучить теоретическую часть работы.
2.Написать программу вывода на экран содержимого заданного пользо- вателем каталога. Вывести с использованием программы содержимое текущего
икорневого каталогов. Предусмотреть контроль ошибок открытия, закрытия, чтения каталога. Вывод сообщений об ошибках должен производиться в стан- дартный поток вывода сообщений об ошибках (stderr) в следующем виде:
имя_модуля текст_сообщения.
|
Варианты индивидуальных заданий |
Р |
|
|
|
Должен быть контроль ошибок для всех операций с файлами и ката- |
||
логами. |
У |
|
1. Отсортировать в заданном каталоге (аргумент 1 команднойИстроки) и во всех его подкаталогах файлы по следующим критериям (аргумент 2 команд-
ной строки, задается в виде целого числа): 1 – по размеру файла, 2 – по имени
файла. Записать отсортированные файлы в новый каталог (аргумент 3 команд- |
|
ной строки). |
Г |
2. Найти в заданном каталоге (аргумент 1 командной строки) и всех его |
|
подкаталогах заданный файл (аргумент 2 о |
Бндной строки). Вывести на кон- |
ма номер индексного дескриптора. Вывкти т же общее количество просмотрен-
соль полный путь к файлу, имя файла, его р змер, дату создания, права доступа,
подкаталогов вывести в заданныйесфайл (аргумент 2 командной строки) и на консоль имена файл , их размер и дату создания, удовлетворяющих задан- ным условиям: 1 – размер файла находится в пределах от N1 до N2 (N1, N2
ных каталогов и файлов.
3. Для заданного ка алога (аргумент 1 командной строки) и всех его
1 командной строки) и для каждого его подкаталога отдельно. Вывести на кон- соль и в файл (аргумент 2 командной строки) название подкаталога, количество файлов в нем, суммарный размер файлов, имя файла с наибольшим размером.
задаются в аргументах к мандной строки), 2 – дата создания находится в |
||
|
|
т |
пределах от M1 до M2 (M1, M2 задаются в аргументах командной строки). |
||
4. |
|
ов |
Найти совпадающие по содержимому файлы в двух заданных катало- |
||
гах (аргументы 1и2 командной строки) и всех их подкаталогах. Вывести на |
||
консоль |
в фа (аргумент 3 командной строки) их имя, размер, дату создания, |
|
|
|
йл |
права доступа, номер индексного дескриптора. |
||
5. |
бПодсчитать суммарный размер файлов в заданном каталоге (аргумент |
|
и |
|
|
Б |
|
|
6. Написать программу, находящую в заданном каталоге и его подка- талогах все файлы заданного размера (имя каталога задается пользователем в качестве первого аргумента командной строки). Диапазон (min – max) разме-
ров файлов задается пользователем в качестве второго и третьего аргументов командной строки. Программа выводит результаты поиска в файл (четвер- тый аргумент командной строки) в следующем виде: полный путь, имя фай- ла, его размер. На консоль выводится общее число просмотренных файлов.
16