Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метвказівки для Астистовой1.doc
Скачиваний:
1
Добавлен:
08.11.2019
Размер:
288.26 Кб
Скачать

Приклад виконання завдання

Наступний приклад дозволяє прочитати вміст каталогу, ім'я якого задається аргументом командного рядка при виклику програми. Для кожного запису каталогу виводяться ім'я файлу і номер дескриптора файлу - inode. На початку програми визначені структура для розміщення чергового запису каталогу (mydir) і покажчик на поточний запис каталогу - дескриптор каталогу (dir _ ds). Структура struct dirent визначена в заголовному файл і містить поля d _ name і d _ ino. Перше поле зберігає рядок з логічним ім'ям файлу. Друге поле містить номер індексного дескриптора.

При виклику функції opendir(argv[1]) відривається каталог, ім'я якого задається рядком, переданим через перший параметр командного рядка при запуску програми. При нормальному завершенні функція повертає покажчик на перший запис каталогу dir _ ds. При помилковому завершенні повертається значення покажчика NULL і виводиться повідомлення про помилку.

Далі організовується цикл послідовного перегляду записів каталогу. Цикл завершується, коли функція читання запису каталогу повертає значення NULL. При кожному виконанні циклу прочитується черговий запис каталогу. Цей запис поміщається в структуру, доступ до якої виконується по покажчику *mydir. Після цього виводяться ім'я файлу(mydir ->d _ name) і номер індексного дескриптора (mydir ->d _ ino).

/* Приклад роботи з каталогом */

#include <stdio.h>

#include <sys/types.h>

#include <dirent.h>

main(int argc, char *argv[])

{

struct dirent *mydir;

DIR *dir_ds;

if((dir_ds = opendir(argv[1])) == NULL) {

perror("Помилка відкриття каталога");

return 1;

}

while((mydir = readdir(dir_ds)) != NULL)

printf("Файл - %s, inode = %d\n", mydir->d_name,

mydir->d_ino);

puts("Кінець каталога");

closedir(dir_ds);

return 0;

}

Завдання

1. Визначити кількість файлів з вказаним розширенням, що знаходяться в заданому каталозі. Якщо таких файлів немає, то видати на екран повідомлення. Ім'я каталогу і розширення передаються в програму через параметри командного рядки.

2. Прочитати вміст вказаного каталогу у файл. Якщо каталог порожній, видати на екран повідомлення. Ім'я каталогу вводиться з клавіатури.

3. Проглянути вміст поточного каталогу, ввести з клавіатури ім'я одного з файлів. Якщо цей файл має ненульову довжину, то вивести його вміст на екран.

4. Якщо вказаний в параметрі командного рядка файл не має встановленого атрибуту дозволу для виконання, то необхідно встановити цей параметр.

5. Перевірити, чи є вказаний в параметрі файл каталогом. Вивести відповідну інформацію на екран. Якщо це каталог, то встановити дозвіл запису в цей каталог.

6. Вивести для певного каталогу імена текстових файлів, для яких дозволений запис. Ім'я каталогу задається через параметр командного рядка.

7. Вивести для каталогу (ім'я каталогу вводиться з клавіатури) список файлів,

для яких дозволено виконання і читання.

8. Прочитати вміст вказаного каталогу у файл. Якщо каталог не порожній, видати на екран повідомлення. Ім'я каталогу передається через параметр командного рядка.

9. Роздрукувати з поточного каталогу імена усіх файлів, що містять цифри, з

розширеннями *.c та *.cpp.

10. Створити в каталозі " ./links" символічні посилання на усі файли поточного каталогу з додаванням до імені файлу ".link".

11. Копіювати в каталог, ім'я якого вводиться з клавіатури, файли, у яких ім'я розпочинається з букв " a" або " z", якщо ці файли не є каталогами.