Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Вниз

Определение сетевого диска на доступность   Найти похожие ветки 

 
sniknik   (2002-04-09 18:54) [0]

Packal, Dos
Нужно примерно следующее, определить существует ли диск скорее всего сетевой и если в течении кагогото таймаута определить не удалось то вернуть false.
проблема в том что это надо сделать в дос режиме, и все попытки проверить зависают на очень длительное время превышая допустимый таймаут.

Код, идеи, ссылки, предложения ?????
(только не руки и сердца :-))


 
Андрей Сенченко   (2002-04-10 20:02) [1]

В ДОС-е "стандартный" тайм-аут при попытки записи на недоступный сетевой диск составляет от 50 секунд до 2 минут на 10-й сетке и стандартной настройке IPX/SPX
// По личному опыту - документации привести не могу.

Можно:
1. Попытаться проверить наличие заранее созданного файла по нужному пути или попытаться создать файл на диске, к которому требуется доступ.
2. ПОпытаться напрямую пообщаться с портами сервера.


 
Anatoly Podgoretsky   (2002-04-10 20:23) [2]

DiskFree достаточно


 
sniknik   (2002-04-11 09:19) [3]

50 сек это замечательно. у меня виснет на гораздо дольшее время гдето 5-6 мин. Стоит мс клиент tcp/ip. неправильно настроен?
ip адрес статичный прописан на машине. Если сервер подключен (диск есть) проблем не возникает.

Попытаться напрямую пообщаться с портами сервера. ? это как, ну в смысле небольшой пример. или где почитать?

DiskFree? поясни pls. вместо попытки создания определять свободный размер? не поможет любая doc функция вешается. не думаю что DiskFree исключение.


 
sniknik   (2002-04-11 12:28) [4]

поставил NetBios время действительно сократилось ~1мин. почему непонятно вроде tcp быстрее.

но все одно начальство недовольно (да и самому не нравится)
возникла идея повесить прерывание до попытки определения на время и выходить по таймауту.
но программа виснет и именно когда выходит из прерывания остальное срабатывает. Почему? что не так? Помогите! кому не в напряг.

код внизу. программка в будущем должна из клипера вызыватся. (обязательно должна ДосЕкзитКод возвращать, остальное можно изменить). Ошибки могут быть самые идиотскии (я так давно в досе не писал :-(()

uses Dos;
var St: String;
Disk: Char;
BiteDisk: byte;

KbdIntVec: Procedure;
Need: boolean;
TimeTik: Integer;
HaltCode: Integer;

function UpperCase(S: string): String;
var i: byte;
begin
for i := 1 to Length(s) do
s[i] := UpCase(s[i]);
UpperCase:= S;
end;

{$F+,S-,W-}
procedure TimeOut; interrupt;
begin
if Need then begin
Need:= False;
if TimeTik > 0 then TimeTik:= TimeTik-1
else begin
SetIntVec($01C,@KbdIntVec);
KbdIntVec;
{ if not ((ParamCount > 1) and (UpperCase(ParamStr(2))="HIDE")) then
Writeln("Disk "+Disk+" not aviable.");}
Halt(2);
end;
Need:= True;
end;
KbdIntVec;
end;
{$F-,S+}

begin
if ParamCount > 0 then begin
St:= UpperCase(ParamStr(1));
Disk:= St[1];
BiteDisk:= Ord(Disk)-64;
Need:= False;
TimeTik:= 30;
GetIntVec($01C,@KbdIntVec);
SetIntVec($01C,Addr(TimeOut));
Need:= True;
if DiskFree(BiteDisk) > 1 then begin
if not ((ParamCount > 1) and (UpperCase(ParamStr(2))="HIDE")) then
Writeln("Disk "+Disk+" aviable.");
HaltCode:= 0;
end else begin
if not ((ParamCount > 1) and (UpperCase(ParamStr(2))="HIDE")) then
Writeln("Disk "+Disk+" not aviable.");
HaltCode:= 2;
end;
SetIntVec($01C,@KbdIntVec);
Halt(HaltCode);
end;
Writeln("DiskAv Disk [hide]");
Writeln("Example: DiskAv C:\ hide");
Halt(1);
end.

возможно дисковые процедуры нельзя прерывать? Сделал с DiskFree (не быстрее! удобнее).


 
Anatoly Podgoretsky   (2002-04-11 12:32) [5]

DiskFree часто используется для факта отсутствия дискеты во флопи дисководе, у тебя такой же случай, работает не взирая на права.


 
sniknik   (2002-04-11 13:22) [6]

да диск a:\ определяет быстро, очень быстро 2-х секунд не проходит (с 1 не уверен секундомера нет :-)
зависание происходит когда определяеш определенный сетевой диск, если сеть порушена (шнур вытащить например). поэтому и пытаюсь извернутся с прерыванием.


 
sniknik   (2002-04-11 15:12) [7]

Бред полный получился. В прерывании нельзя использовать кучу функций в том числе Writeln, Halt. С переопределением векторов не уверен, когда по рантайм еррор вываливается когда нет.

Вообще идея бредовая внешним событием прервать дисковую функцию. (когда удается диск отваливается даже если он был виден до этого). На пример можно внимания не обращать. У кого идеи есть? Щас пытаюсь через прерывания NetBios-а может быстрей получится.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
6-23701
Dime
2002-04-28 22:17
2002.07.08
Мониторинг сервера


4-23845
fort
2002-04-16 06:14
2002.07.08
UTF-8


14-23766
Val
2002-06-07 13:25
2002.07.08
ваши мысли по поводу?


3-23476
Wassily
2002-06-15 20:26
2002.07.08
Как создать базу данных?


6-23694
Dmitriy_0
2002-04-25 10:32
2002.07.08
Как работать со своим SMTP ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский