Реферат по предмету "Информатика, программирование"


Програма для сканування каталогу на наявність відповідних файлів

Міністерствоосвіти і науки України
Житомирський державний технологічнийуніверситет
Лабораторнаробота №2
з курсу«Системне програмування»
м. />Житомир2011 р.

Зміст
 
1. Розібрати роботупрограми find.с
2. Проекспериментуватиз функціями findfirst(), findnext(), змінюючи атрибути шуканих файлів
3.Вияснитипризначення поля ff_reserved в структурі ffblk
4.Сформуватисьогоднішню дату та час в два байти, відповідно описаним правилам
5.Змінитипрограму так, щоб вона показувала лише
Контрольні запитання
Висновок
Список використаної літератури
1.Розібрати роботу програми find.с
 
Підключаємо стандартні бібліотеки:
#include
#include
#include
#include
#include
Оголошуємо прототипи функцій:
void print_info( struct ffblk *find );
char *time_conv( unsigned time, char *char_buf );
char *date_conv( unsigned date, char *char_buf );
Головна функція main() отримує у якості аргументів цілочисельнийаргумент argc який містить кількість аргументів у командному рядку та покажчикна масив покажчиків на рядки, де кожен вказує на певний аргумент командногорядка.
void main( int argc, char *argv[] ) {
Оголошуємо змінну find типу ffblk, що єструктуроювизначеною у бібліотеці і включає наступні поля:
char ff_reserved[ 21 ]; /* зарезервовано для MS-DOS*/;
char ff_attrib; /* атрибут з елементу директорія */
unsigned ff_ftime;  /* поле часу з елементу директорія*/
unsigned ff_fdate;  /* поле дати з елементу директорія*/
long ff_fsize;  /* поле розміру файлу з елементудиректорія */
char ff_name[ 13 ];  /*ASCIIZ- рядок з ім’ям ірозширенням файлу */
struct ffblk find;
Викличемо функцію findfirst(), задавши їй у якостіпараметрів другий аргумент із командного рядка, посилання на структуру find тафайловий атрибут.
Функція findfirst() повертає нуль у випадку успіху,тобто даний оператор if перевіряє чи виконалась функція із заданимипараметрами.
if( !findfirst( argv[1], &find, FA_ARCH ) ) {
Якщо findfirst() виконалася правильно, то інформаціябуде занесена до структури find. Викличемо функцію print_info(), яка і надрукуєструктуру у відповідному форматі.
printf( "\n"
"\nFile Name Attr Date Time Size"
"\n------------ — — — --------");
print_info( &find );
}
У разі помилки findfirst() поверне -1 і виконаєтьсяоператор else, який надрукує відповідну інформацію про правильність заповненнякомандного рядка і завершить виконання програми.
else {
printf( "\nUsage: FIND filename"
"\n Wildcards ""!"" and ""*""is OK.\n" );
getch();
exit( -1 );
}
Функція findnext() продовжує пошук файлів, якийрозпочала функція findfirst(). Findnext()також повертає нуль у випадку успішного виконання. Тому за допомогою оператораwhile продовжуємо пошук до тих пір доки це можливо, тобто доки findnext () неповерне -1.
while( !findnext( &find ) )
print_info( &find );
Завершимо виконання програми.
getch();
exit( 0 );
}
Функція print_info() призначена для друку структуриffblk у відповідному зрозумілому для користувача форматі. Функція нічого неповертає. У якості парметрів приймає покажчик на структуру ffblk.
void print_info( struct ffblk *pfind ) {
Оголосимо два мив мольних масиви, які будуть зберігативідповідно час та дату у форматі рядка.
char timebuf[10], datebuf[12];
Викличемо date_conv() та time_conv() для конвертаціїполів дати і часу із цілочисельного формату до рядкового.
date_conv( pfind->ff_fdate, datebuf );
time_conv( pfind->ff_ftime, timebuf );
Надрукуємо поля структури ffblk.
printf( "\n%-12s ", pfind->ff_name);
printf( «0x%02X %8s %8s %8ld »,
pfind->ff_attrib, datebuf, timebuf,pfind->ff_fsize );
}
Функція time_conv() конвертує час представлений увигляді одного беззнакового цілого у рядок. Функція приймає у якості параметрівчисло t, яке і є часом, та покажчик на рядок *buf, що ібуде представленням дати у форматі рядка. Функція повертає покажчик на рядок.
char *time_conv( unsigned t, char *buf ) {
Перетворення відбувається наступним чином. Оголосимоцілочисельні змінні hour, minute, second.
int hour, minute, second;
ff_ftime є 16-бітовою структурою поділеною на бітовіобласті, кожна з яких і відповідає годині, хвилині, та секунді. Числу годинвідповідають з 11 по 15 біти, хвилин – з 5 по 10, і секунд поділених на 2 – з 0по 4 відповідно. Таким чином, для того щоб виокремити кожен із елементів,зсунемо побітово число t (час) на відповідну кількість бітів і скористаємосяоператором & (і).
hour = ( t >> 11 ) & 0x1F;
minute = ( t >> 5 ) & 0x3F;
second = ( t & 0x1F ) * 2;
За допомогою функції sprintf() пер направимо змінні hour,minute, second у відповідному форматі до масиву на який вказує buf.
sprintf( buf, "%2.2d:%02.2d:%02.2d", hour,minute, second);
return( buf );
}
Функція date_conv(), подібно функції time_conv(),переводить формат подачі дати із цілого числа в рядок. Дню відповідають з 0 по4 біти, місяцю – з 5 по 8, а року, починаючи з 1980, – з 9 по 15 біти.
char *date_conv( unsigned d, char *buf ) {
int day, month, year;
day = d & 0x1f;
month = ( d >> 5 ) & 0x0f;
year = ( d >> 9 ) + 1980;
sprintf( buf, "%2.2d.%02.2d.%04.2d", day,month, year);
return( buf );
}
 
2. Проекспериментувати з функціями 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) — архівніфайли.
 
3. Вияснити призначення поля ff_reserved в структурі ffblk
 
В структурі ffblk є поле ff_reserved, яке призначенедля використання системою MS-DOS. Поле маєтип масив розмірністю 21 символ.
 
4. Сформувати сьогоднішню дату та час в два байти, відповідно описанимправилам
 
Нехай маємо дату — 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
00000 0011110 0000
3. date | mon
00000 0011110 1100
4. date
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
00000 10000 000000
3.time | M
00000 10000 111011
4.time
10000 111011 00000
5.time | S
10000 111011 10001 = 34673
Отже, 16:59:35 = 34673.
програмасканування файл директорія
5. Змінити програму так, щоб вона показувала лише
 
· директорії;
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().
2. Чому час зміни файла записується з точністюдо двох секунд?
У структурі ffblk виділене поле unsigned ff_ftime дляпредставлення часу. У цьому полі числу секунд поділених на 2 (тому із точністюдо двох секунд) виділно 5 бітів – з 0 по 4 відповідно, а це максимум число 31.
3. Звідки береться інформація структуриffblk?
Якщо функція findfirst() знаходить файл, то структураffblk заповнюється інформацією про каталог і файл
4. Що таке елемент директорію?
Директорій – це спеціальний файл на диску, якийскладається з так званих елементів директорію. Розмір елементу в MS-DOS –32 байта. Розмір кореневого директорія обмежений і залежить від форматудиску. Наприклад, для диску 360К байт в кореневому директорії можерозміститься тільки 112 елементів. Файл кореневого директорія розташується вфіксованому місці диску. Нижчі в ієрархії директорії називаютьсясубдиректоріями вони можуть розташуватися в будь-якому місці диску і мати числоелементів, обмежене лише фізичним об’ємом диску.
 
/>
Формат елементу директорію MS-DOS
 

Висновок
Отже,на даній лабораторній роботі було проаналізовано програму для скануваннякаталогу на наявність відповідних файлів. У ході виконання було розібранороботу функцій findfirst() таfindnext(), а також будову та призначення структури ffblk.
У ході виконання лабораторній роботи, були здобуті навики роботи зі структуроюffblk, а саме з переведенням дати та часу у формат типу unsigned.

Список використаної літератури
 
1. Касаткін А.І. Управление ресурсами. — Минск: Вышейшая школа, 1992.
2. Касаткін А.І. Системное программирование.- Минск: Вышейшая школа, 1991.
3. Власенко О.В., Данильченко О.М., Северин О.О. Системнепрогрмамування. Курс лекцій. Частина 1. (бібліотека ЖІТІ)


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.