Проекспериментувати з функціями findfirst(), findnext(), змінюючи атрибути шуканих файлів
Функція findfirst() у якості одного із параметрів приймає атрибут відкриття файлу. Функція findnext() використовує ті ж атрибути, що визначені у функції findfirst(). Таким чином ми можемо встановити такі атрибути доступу:
· FA_RDONLY (Read-only attribute) – тільки для читання;
· FA_HIDDEN (Hidden file) – скриті файли;
· FA_SYSTEM (System file) – ситемні файли;
· FA_LABEL (Volume label) – мітка тому;
· FA_DIREC (Directory) – директорії;
· FA_ARCH (Archive) - архівні файли.
Вияснити призначення поля ff_reserved в структурі ffblk
В структурі ffblk є поле ff_reserved, яке призначене для використання системою MS-DOS. Поле має тип масив розмірністю 21 символ.
Сформувати сьогоднішню дату та час в два байти, відповідно описаним правилам
Нехай маємо дату - 31.12.2010
Під дату виділяється 2 байти
|15. . . . . . . . . . .9|8. . . . . .5|4. . . . . . . .0|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
| Years -1980 | Month | Day |
day 31 = 11111
mon 12 = 1100
yaer 2010-1980 = 0011110
date = 0000 0000 0000 0000
1. date = year
000000000 0011110
2. date << 4
00000 0011110 0000
3. date | mon
00000 0011110 1100
4. date << 5
0011110 1100 00000
5. date | day
0011110 1100 11111 = 15775
Отже, 31.12.2010 = 15775.
Нехай маємо час - 16:59:35.
Під дату виділяється 2 байти
|15…….....11|10...............5|4…............0|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
| Hours | Minutes | Seconds/2 |
H 16 = 10000
M 59 = 111011
S 35/2 = 10001
time = 00000 000000 00000
1.time = H
00000 000000 10000
2.time << 6
00000 10000 000000
3.time | M
00000 10000 111011
4.time << 5
10000 111011 00000
5.time | S
10000 111011 10001 = 34673
Отже, 16:59:35 = 34673.
Програма сканування файл директорія
|
|
Змінити програму так, щоб вона показувала лише
· директорії;
if( !findfirst( argv[1], &find, FA_ DIREC ) )
· приховані файли;
if( !findfirst( argv[1], &find, FA_ HIDDEN ) )
· системні файли;
if( !findfirst( argv[1], &find, FA_ SYSTEM ) )
· директорії та системні файли.
if( !findfirst( argv[1], &find, FA_ SYSTEM || FA_ DIREC ) )
Контрольні запитання
1. Як функція findnext() "дізнається", які файли потрібно шукати?
Функція findnext() шукає файли, параметри яких задані у функції findfirst().
Чому час зміни файла записується з точністю до двох секунд?
У структурі ffblk виділене поле unsigned ff_ftime для представлення часу. У цьому полі числу секунд поділених на 2 (тому із точністю до двох секунд) виділно 5 бітів – з 0 по 4 відповідно, а це максимум число 31.
Звідки береться інформація структури ffblk?
Якщо функція findfirst() знаходить файл, то структура ffblk заповнюється інформацією про каталог і файл
Що таке елемент директорію?
Директорій – це спеціальний файл на диску, який складається з так званих елементів директорію. Розмір елементу в MS-DOS – 32 байта. Розмір кореневого директорія обмежений і залежить від формату диску. Наприклад, для диску 360К байт в кореневому директорії може розміститься тільки 112 елементів. Файл кореневого директорія розташується в фіксованому місці диску. Нижчі в ієрархії директорії називаються субдиректоріями вони можуть розташуватися в будь-якому місці диску і мати число елементів, обмежене лише фізичним об’ємом диску.
|
|
Формат елементу директорію MS-DOS
Висновок
Отже, на даній лабораторній роботі було проаналізовано програму для сканування каталогу на наявність відповідних файлів. У ході виконання було розібрано роботу функцій findfirst() та findnext(), а також будову та призначення структури ffblk.
У ході виконання лабораторній роботи, були здобуті навики роботи зі структурою ffblk, а саме з переведенням дати та часу у формат типу unsigned.
Список використаної літератури
Касаткін А.І. Управление ресурсами. - Минск: Вышейшая школа, 1992.
Касаткін А.І. Системное программирование. - Минск: Вышейшая школа, 1991.
3. Власенко О.В., Данильченко О.М., Северин О.О. Системне прогрмамування. Курс лекцій. Частина 1. (бібліотека ЖІТІ)
Дата добавления: 2020-01-07; просмотров: 66; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!