Локальные сети персональных компьютеров. Работа с сервером Novell NetWare

       

Программа VOLINFO


Приведем исходный текст программы, которая выводит список смонтированных томов для текущего сервера. Если текущий диск локальный, программа выходит информацию о первичном сервере.

Программа в цикле с помощью функции GetVolumeName() получает имена смонтированных томов. Если первый байт имени тома содержит двоичный ноль, программа выходит из цикла.

Для каждого тома программа получает информацию о томе, вызывая функцию GetVolumeInfoWithNumber().

// =================================================== // Листинг 7. Программа для просмотра имен // томов текущего или первичного файл-сервера // Файл volinfo\volinfo.cpp // // (C) A. Frolov, 1993 // ===================================================

#include <stdlib.h> #include <stdio.h>

#define WORD unsigned int #define BYTE unsigned char

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int GetVolumeName(int, char*); extern "C" int GetVolumeInfoWithNumber(BYTE, char*, WORD*, WORD*, WORD*, WORD*, WORD*, WORD*);

void main(void) {

char MajorVersion=0; char MinorVersion=0; char Revision=0; char VolumeName[64][16]; int ccode, i;

WORD TotalBlocks, SectorsPerBlock, AvailableBlocks; WORD TotalDirectorySlots, AvailableDirectorySlots, Removable; long TotalSectors, AvailableSectors;

printf("\n*VOLINFO* (C) Frolov A., 1993\n");

asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si

if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); return; }



printf("\nСмонтированные тома:\n" "----------------------------------------------\n"); printf("Имя тома\tВсего Кбайт\tСвободно Кбайт\n"); printf("----------------------------------------------");

// Цикл по томам файл-сервера.

for(i=0; i<64; i++) {

// Получаем и выводим имя тома

ccode = GetVolumeName(i, VolumeName[i]); printf("\n%s\t", VolumeName[i]);

// Если ошибка или тома нет, выходим из цикла


if(ccode) break; if(!*(VolumeName[i])) break;

// Получаем информацию о томе

ccode = GetVolumeInfoWithNumber(i, VolumeName[i], &TotalBlocks, &SectorsPerBlock, &AvailableBlocks, &TotalDirectorySlots,&AvailableDirectorySlots, &Removable);

if(!ccode) {

// Подсчитываем общее количество секторов на томе // и количество свободных секторов

TotalSectors = (long)TotalBlocks * SectorsPerBlock; AvailableSectors = (long)AvailableBlocks * SectorsPerBlock;

// Выводим размер томов и размер свободного пространства // в килобайтах. Учитываем, что размер сектора // составляет 512 байт.

printf("\t%ld\t\t%ld", ((long)TotalSectors * 512L) / 1024L, ((long)AvailableSectors * 512L) / 1024L); } } }

Вот что программа VOLINFO вывела на экран, когда мы запустили ее на нашем сервере SYSPRG:

*VOLINFO* (C) Frolov A., 1993

Смонтированные тома: ---------------------------------------------- Имя тома Всего Кбайт Свободно Кбайт ---------------------------------------------- SYS 140000 8084 VOL1 178864 13768 VOL2 160000 13372 VOL3 169024 924


Содержание раздела