- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Визначення поточної робочої директорії
char * getcwd (char * buf,, int buflen);
Визначає поточну робочу директорію
char * _getdcwd (int disk, char * buf,, int buflen);
Визначення поточної директорії для вказаного диска, при цьому 0 - поточний диск, 1 - А, 2 - B, ...
Якщо повне ім'я файлу, включаючи нульовий ознака кінця рядка більше ніж buflen, виникає помилка.
Якщо buf = NULL, _getdcwd викликає malloc для виділення динамічної пам'яті за адресою buf в кількості buflen байт. Пізніше можна звільнити цю пам'ять за допомогою функції free, використовуючи адресу, повертаний цими функціями.
При успіху функції повертають buf.
При невдачі вони повертають NULL і привласнюють errno одне з наступних значень:
ENODEV - немає такого диска
ENOMEM - немає пам'яті для розміщення buf,
ERANGE - ім'я каталогу довший, ніж buflen.
Приклад.
# Include <stdio.h>
# Include <dir.h>
int main (void)
{
char buffer [MAXPATH];
getcwd (buffer, MAXPATH);
printf ("Поточним каталогом є:% s \ n", buffer);
return 0;
}
Приклад.
# Include <direct.h>
# Include <stdio.h>
char buf [65];
void main ()
{
if (_getdcwd (3, buf, sizeof (buf)) == NULL)
perror ("Не можна отримати поточну директорію на диску C: \ n");
else
printf ("Поточною директорією на диску C: є% s \ n", buf);
}
Визначення поточного каталогу диска
int getcurdir (int drive, char * directory);
directory вказує на область пам'яті розміром не менше MAXDIR, куди буде поміщено ім'я поточного каталогу. Ім'я не містить вказівки диска.
Повертає 0 у випадку успіху та -1 при помилці.
Приклад.
char * current_directory (char * path)
{
strcpy (path, "X: \ \"); / * fill string with form of response: X: \ * /
path [0] = 'A' + getdisk (); / * replace X with current drive letter * /
getcurdir (0, path +3); / * fill rest of string with current directory * /
return path;
}
int main (void)
{
char curdir [MAXPATH];
current_directory (curdir);
printf ("The current directory is% s \ n", curdir);
return 0;
}
Визначення розміру вільного дискового простору
void getdfree (unsigned char drive, struct dfree * dtable);
Функція заповнює структуру dtable для указна диска (0 - поточний диск, 1 - А, 2 - B, ...).
struct dfree {
unsigned df_avail, / / число вільних кластерів
unsigned df_total, / / все кластерів
unsigned df_bsec, / / число байтів в секторі
unsigned df_sclus, / / число секторів в кластері
}
При помилку привласнює елементу df_sclus структури dfree значення 0xFFFF.
# include <stdio.h>
# include <stdlib.h>
# include <dir.h>
# include <dos.h>
int main (void)
{
struct dfree free;
long avail;
int drive;
drive = getdisk ();
getdfree (drive +1, & free);
if (free.df_sclus == 0xFFFF)
{
printf ("Error in getdfree () call \ n");
exit (1);
}
avail = (long) free.df_avail
* (Long) free.df_bsec
* (Long) free.df_sclus;
printf ("Drive% c: has% ld bytes available \ n", 'A' + drive, avail);
return 0;
}
Визначення / встановленн поточного диска
int getdisk ();
int setdisk (int drive);
Нумерація дисків: 0 - А, 1 - В, 2 - С, ...
getdisk повертає номер поточного диска, setdisk повертає загальну кількість доступних дисків.
Приклад.
# include <stdio.h>
# include <dir.h>
int main (void)
{
int disk, maxdrives = setdisk (2);
disk = getdisk () + 'A';
printf ("\ nКолічество логічних дисків:% d \ n", maxdrives);
printf ("Поточний диск:% c \ n", disk);
return 0;
}
Приклад.
# include <stdio.h>
# include <dir.h>
int main (void)
{
int save, disk, disks;
/ * Зберегти вихідний диск * /
save = getdisk ();
/ * Надрукувати кількість логічних дисків * /
disks = setdisk (save);
printf ("У системі% d логічних дисків \ n \ n", disks);
/ * Надрукувати імена доступних логічних дисків * /
printf ("Доступні диски: \ n");
for (disk = 0; disk <26; + + disk)
{
setdisk (disk);
if (disk == getdisk ())
printf ("% c: диск доступний \ n", disk + 'a');
}
setdisk (save);
return 0;
}
