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

       

Программа LOGLOCK


Программа LOGLOCK (листинг 24) демонстрирует использование логических записей для синхронизации процессов.

Вначале программа запрашивает в цикле у оператора имена логических записей и добавляет их в набор. Цикл добавления записей завершается, когда оператор вводит символ "-". Затем программа выполняет попытку заблокировать группу записей.

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

Перед завершением своей работы программа LOGLOCK разблокирует записи и удалит набор.

// =================================================== // Листинг 24. Блокирование логических записей // Файл loglock\loglock.cpp // // (C) A. Frolov, 1993 // ===================================================

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

#define BYTE unsigned char #define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int LogLogicalRecord(char *, BYTE, WORD); extern "C" int LockLogicalRecordSet(WORD); extern "C" void ReleaseLogicalRecordSet(void); extern "C" void ClearLogicalRecordSet(void);

void main(void) {

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

char LogicalRecordName[100];

int ccode;

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



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

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

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

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

for(;;) { printf("\nВведите имя логической записи или '-':"); gets(LogicalRecordName);

if(LogicalRecordName[0] == '-') break;

// Добавляем логическую запись в набор

ccode = LogLogicalRecord(LogicalRecordName, 0, 0);

if(!ccode) printf("Логическая запись %s добавлена к списку\n", LogicalRecordName); else printf("Ошибка при добавлении %02.2X\n", ccode); }

// Блокируем набор логических записей

ccode = LockLogicalRecordSet(0);

if(!ccode) printf("Логические записи заблокированы\n"); else printf("Ошибка при блокировании " "логических записей %02.2X\n", ccode);

printf("Для разблокирования логических записей " " нажмите любую клавишу\n"); getch();

// Разблокируем набор логических записей

ReleaseLogicalRecordSet();

// Удаляем набор логических записей

ClearLogicalRecordSet(); }



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