4.2   Керування поточним накопичувачем і директорієм

Операційна система MS-DOS у внутрішніх змінних береже номер поточного накопичувача і поточний робочий директорій для кожного накопичувача. Turbo С містить функції, що дозволяють з програми визначити і встановити потрібні значення поточного директорію і поточного накопичувача. Нижче описані придатні для цього функції.

#include <dir.h>
int getdisk( void )

Повертає ціле число, що ідентифікує поточний накопичувач системи. Накопичувач А ідентифікується значенням 0, накопичувач В - 1, С - 2 і т.д.

# include <dir.h>
int setdisk( int drive )

Встановлює в системі поточний накопичувач, що задається значенням drive. Накопичувач А ідентифікується значенням 0, накопичувач В - 1. С - 2 і т.д. У випадку успіху повертається загальне число накопичувачів у системі; у протилежному випадку повертається -1 і в зовнішню перемінну errno записується код помилки.

#include <dir.h>
int getcurdir( int drive, char *directory )

В область пам’яті на яку вказує directory, записується ASCIIZ рядок поточного директорію для накопичувача, що задається значенням drive. Якщо drive=0 запитується інформація про директорій поточного робочого накопичувача (накопичувача за замовчанням), якщо drive=1, - інформація про накопичувач А, якщо drive=2, про накопичувач В и т. д. У випадку успіху повертає 0; протилежному випадку повертається -1 і в зовнішню змінну errno записується код помилки.

#include<dir.h>
char *getcwd( char *buf, int buflen )

Поміщає в буфер, на початок якого вказує buf, букву поточного накопичувача й абсолютний маршрут поточного робочого директорія. Параметр buflen передає функції максимальне число символів, що може бути розміщене в буфері buf. Якщо buf дорівнює NULL, функція динамічно розподіляє buflen байт, куди записує запитану інформацію. У випадку успіху функція повертає покажчик на початок області пам’яті, у якій розміщено ASCIIZ-рядок специфікації поточного накопичувача і директорія. У протилежному випадку повертається NULL і в зовнішню змінну errno записується код помилки. Якщо він дорівнює ERANGE, довжина сформованого рядка перевищує buflen. Якщо buf дорівнює NULL і немає вільної пам’яті, errno дорівнює ENOMEM. Функція дуже зручна для зберігання встановлених накопичувача і директорія з метою наступного їх відновлення, якщо програма буде змінювати накопичувач і директорій.

#include<dir.h>
int chdir( const char *palh )

Встановлює в якості поточного робочого директорію директорій, що задається ASCIIZ-рядком, на якій вказує path. У випадку успіху повертається 0; у протилежному випадку повертається -1 і в зовнішню змінну errno записується код помилки.

Наведемо приклад програми, що роздруковує поточні директорії для всіх накопичувачів системи і визначає поточний накопичувач:

/*L4_1.C*1
#include <dir.h>
#include <stdio.h>
char path[ 64 ];
void main( void ) {
  int drive=1;
  path[0]=‘\\’;
  while(!(getcurdir(drive, path+1))) {
    printf(“Накопичувач %c: - Поточний директорій %s\n”,
              (drive+’A’-1), path);
    drive++;
  }
  printf(“Поточний накопичувач %c: \n”, (getdisk()+’A’));
}