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

       

Программы MAKEDIR, RENMDIR, DELDIR


В этом разделе мы приведем исходные тексты программ, выполняющих основные действия над сетевыми каталогами - создание, переименование и удаление.

Программа MAKEDIR (листинг 12) создает каталог и задает для него маску прав доступа. Имя создаваемого каталога и маска передаются программе при запуске в качестве параметров:

// =================================================== // Листинг 12. Создание каталога // Файл makedir\makedir.cpp // // (C) A. Frolov, 1993 // ===================================================

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

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int CreateDirectory(BYTE, char*, BYTE);

void main(int argc, char *argv[]) {

char MajorVersion=0; char MinorVersion=0; char Revision=0;

BYTE RightsMask;

int ccode;

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

// Проверяем наличие сетевой оболочки

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



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

// Необходимо задать букву, обозначающую имя // локального диска и путь к сетевому каталогу

if(argc < 3) { printf("Укажите имя создаваемого каталога и " "права доступа, \nнапример: makedir sys:users RW"); return; }

// Параметры должны быть заданы заглавными буквами

strupr(argv[1]); strupr(argv[2]);

// Определяем маску прав, разбирая второй // параметр, заданный при запуске программы

RightsMask = 0x00;

for(int i = 0; argv[2][i] != '\0' ; i++) { switch(argv[2][i]) { case 'R': RightsMask |= 1; break; case 'W': RightsMask |= 2; break; case 'O': RightsMask |= 4; break; case 'C': RightsMask |= 8; break; case 'D': RightsMask |= 0x10; break; case 'P': RightsMask |= 0x20; break; case 'S': RightsMask |= 0x40; break; case 'M': RightsMask |= 0x80; break; case '-': break; default: printf("Ошибка в параметрах\n"); return; } }


// Создаем каталог

ccode = CreateDirectory(0, argv[1], RightsMask);

if(!ccode) printf("Каталог создан\n"); else printf("Ошибка %02.2X\n", ccode); }

Программа RENMDIR ( листинг 13) позволяет переименовать существующий сетевой каталог. Путь к каталогу и его новое имя следует задать в качестве параметров при запуске программы.

// =================================================== // Листинг 13. Переименование каталога // Файл renmdir\renmdir.cpp // // (C) A. Frolov, 1993 // ===================================================

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

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int RenameDirectory(BYTE, char *, char *);

void main(int argc, char *argv[]) {

char MajorVersion=0; char MinorVersion=0; char Revision=0;

int ccode;

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

// Проверяем наличие сетевой оболочки

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

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

// Необходимо задать букву, обозначающую имя // локального диска и путь к сетевому каталогу

if(argc < 3) { printf("Укажите путь к каталогу и " "новое имя, \nнапример: renmdir sys:users usr"); return; }

// Параметры должны быть заданы заглавными буквами

strupr(argv[1]); strupr(argv[2]);

// Переименовываем каталог

ccode = RenameDirectory(0, argv[1], argv[2]);

if(!ccode) printf("Каталог переименован\n"); else printf("Ошибка %02.2X\n", ccode); }

Программа DELDIR (листинг 14) удаляет каталог, путь к которому задан в качестве параметра при запуске программы.

// =================================================== // Листинг 14. Удаление каталога // Файл deldir\deldir.cpp // // (C) A. Frolov, 1993 // ===================================================



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

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int DeleteDirectory(BYTE, char *);

void main(int argc, char *argv[]) {

char MajorVersion=0; char MinorVersion=0; char Revision=0;

int ccode;

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

// Проверяем наличие сетевой оболочки

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

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

// Необходимо задать букву, обозначающую имя // локального диска и путь к сетевому каталогу

if(argc < 2) { printf("Укажите путь к каталогу, " "\nнапример: deldir sys:users"); return; }

// Параметр должен быть задан заглавными буквами

strupr(argv[1]);

// Удаляем каталог

ccode = DeleteDirectory(0, argv[1]);

if(!ccode) printf("Каталог удален\n"); else printf("Ошибка %02.2X\n", ccode); }


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