Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 270
от 30.05.2003, 22:40

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 816
Отправлено ответов: 1869
Активность: 229.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 111.41
[Подробней >>]
Vdr
Статус: Доверительный
Общий рейтинг: 110.28
[Подробней >>]
Knignick
Статус: Опытный
Общий рейтинг: 112.85
URL: Мой каталог ссылок по программированию
[Подробней >>]
 
Pin
Статус: Опытный
Общий рейтинг: 120.94
URL: My HOMEPAGE
[Подробней >>]
Ramzes
Статус: Профессиональный
Общий рейтинг: 128.39
URL: Microsoft homepage
[Подробней >>]
[MozgC]
Статус: Опытный
Общий рейтинг: 183.92
[Подробней >>]
 
Hayk
Статус: Доверительный
Общий рейтинг: 115.03
[Подробней >>]
xiron
Статус: Опытный
Общий рейтинг: 114.28
[Подробней >>]
Avl2k
Статус: Опытный
Общий рейтинг: 126.09
[Подробней >>]
 
Yuri Gordienko
Статус: Опытный
Общий рейтинг: 115.34
[Подробней >>]
Dzik
Статус: Профессиональный
Общий рейтинг: 113.16
URL: Разработка игрушек
[Подробней >>]
BOLT
Статус: Опытный
Общий рейтинг: 165.77
URL: В помощь начинающему программитсу Assembler, C/C++
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 800. задание: написать программу сканирующие все каталоги под Linux(FreeBSD,...) и выводящуюю список всех... (ответов: 1)
Вопрос № 801. Доброго времени суток! такой вопрос: в чем лучше хранить информацию? :) то есть, если точнее: 1.у м... (ответов: 3)
Вопрос № 802. Здравствуйте, уважаемые эксперты. По просьбе [MozgC]. По ходу вашего ответа на вопрос 797. Я упор... (ответов: 2)
Вопрос № 803. Всем Hi! У меня стаит Visual C++ 6.0 со всеми причиндалми, иногда при загрузке не которых страниц и... (ответов: 4)
Вопрос № 804. Здравствуйте эксперты. Подскажите пожалуйста как реализовать перегрузку равенства в своем классе, чт... (ответов: 8)
Вопрос № 805. Здравствуйте, эксперты! У меня к вам вопрос: я пишу прогу под Win32. Она должна запускать другие про... (ответов: 1)

Вопросов: 6, ответов: 19


 Вопрос № 800

задание: написать программу сканирующие все каталоги под Linux(FreeBSD,...) и выводящуюю список всех инодов, на которые ссылается 2 и более файлов. Для каждого такого инода вывести также список этих файлов.
Собсно проблема. Дома под SuSE Linux все вроде как отлично работает. А когда на следующий день пошел лабу сдавать, вот получился большой облом, там у нам FreeBSD, и к серваку коннектимся через Putty. Короче говоря моя програ там отказывается ходить по каталогам, в чем проблема я незнаю. предположительно функция opendir() не возвращает ссылку на открытый каталог или не может его открыть. А может все проблема в том что прога запускается не слокальной машины(очень сомневаюсь). Вы ее откомпилируйте, посмотрите, будет ли она у вас работать?


Приложение:


Вопрос отправлен: 27.05.2003, 00:21
Отправитель: Frank (Frank_u@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает DiGiT[old]

Здравствуйте, Frank!
Ну наверное пермиссий не хватает ?
А вообще столько ошибок.
Во первых что это значит myfunc(char ddd[256]) ??
Это значит что передается указатель и sizeof ddd даст тебе размер указателя.
Во вторых, где это видано чтобы в си были комментарии типа //
А прога все равно запуска не удаленно, а на самом серваке(к слову).
У меня на ALT linuz не работает я его копать не стал дальше :)

Ответ отправлен: 27.05.2003, 02:59
Отправитель: DiGiT[old]


 Вопрос № 801

Доброго времени суток!
такой вопрос: в чем лучше хранить информацию? :)
то есть, если точнее:
1.у моего брата есть куча статистической информации по формуле-1(вид спорта такой :)), причем все эти таблицы составлял он сам, причем все они в excel.
2.есть такой диск "энциклопедия формулы-1 1950-1996", там можно отсортировать данные по пилотам, набравшим наибольшее количество очков, по времени, месту проведения гран-при и т.д.
3.хотелось бы помочь брату сделать некое подобие такого диска
вот собственно возникшие вопросы:
1. я ошибаюсь, или конечная ехе-шка будет запускать, к примеру, mysql-сервер (или нечто подобное), и посылать туда какие-то запросы. И все это сможет работать с диска.
2. если в первом я не сильно ошибся, то можно ли безболезненно перевести инфу из excel на сервер? а то там поля у таблиц разного цвета, размера, объединены некоторые и т.д.
3. а в каком вообще формате обычно хранятся данные в подобном случае?
4. дайте, пожалуйста, какие-нибудь ссылки на нечто подобное: сайты, книги, исходники...
5. вот еще: а где такое лучше писать Билдер или Визуал?
заранее спасибо.



Вопрос отправлен: 27.05.2003, 01:16
Отправитель: вова

[Следующий вопрос >>] [Список вопросов]

Отвечает Vdr

Здравствуйте, вова!
В первом ты не ошибся, но в обычной ситуации для программ запускаемых с диска не используют какие-либо сервера которые пользователь должен хотябы иметь.
Проще использовать таблицы Paradox.
Если будешь создавать на C++ Builder (на мой взгляд на нем удобнее) можешь почитать Архангельского "Программирование в С++ Builder 5" или "Программирование в С++ Builder 6". Там это описанно достаточно подробно.
С ссылками сложнее, сам долго искал, но подробнее книги ничего не нашел.

Ответ отправлен: 27.05.2003, 10:15
Отправитель: Vdr


Отвечает Knignick

Добрый день, вова!
Можно обойтись самим Excel, только для удобства привести его "в порядок" (как-то структурировать, чтобы была единая таблица одной структуры или несколько). Обращаться к документу Excel и получать оттуда данные можно и из Builder'a, и тем более из Visual C++. Проще это сделано в Buildere, грамотнее - в VC++. Ссылок на работу с Excel при помощи C++ полно(кстати можешь юзать маетриалы и по Дельфи - принцип один и тот же). Желаю удачи.


Ответ отправлен: 27.05.2003, 18:09
Отправитель: Knignick


Отвечает Pin

Добрый день, вова!
1. Запуск с диска возможен, однако может потребоваться установка софта.
3. В БД Paradox, Foxpro, Access.
5. Я предпочитаю C++Builder.

Ответ отправлен: 28.05.2003, 00:10
Отправитель: Pin


 Вопрос № 802

Здравствуйте, уважаемые эксперты.
По просьбе [MozgC].
По ходу вашего ответа на вопрос 797.
Я упорно пытаюсь понять принципы работы с сетью в виндах.
Проблема в том, что мне не понятно какие компоненты и что дают. В наборе компонентов C++ Builder 6.0 есть ряд компонентов аля Server & Client. Так вот мне они не нужны. Мне нужно чтобы мое приложение могло отправлять пакеты и принимать ответы на них. Т.е. нет необходимости в серверной части. Но как использовать стандартные сокеты совершенно не понятно.
По поводу прямого "впрыска" - подразумевается, что я сам сформирую пакет (сам запакую данные в TCP - IP - Ethernet) и передам драйверу сетевой карты, который и передаст пакет в сеть, не запаковывая в Ethernet повторно.
Также интересно как сделать так чтобы я сам паковал только TCP - IP, или UDP - IP или ICMP - IP , а также варианты когда какие-либо стандартные средства сами пакуют, а я только сообщаю IP-адреса и если нужно порты.
Кроме передачи интересует и прием (аля снифер) на всех возможных уровнях (IP, TCP/UDP/ICMP, Ethernet)
Дополнительную заинтересованность вызывает работа с хабами и свичами - возможно ли от них получить какие-то данные. Например, можно ли произведя опрос оборудования построить архитектуру сети?
Суть всей проблемы заключается в том, что теорию я знаю прекрасно, а вот в практической части - полный ноль.
Особо буду благодарен за примеры и ссылки в русский сегмент сети.
Извините за слишком глобальный вопрос.
Заранее спасибо!




Вопрос отправлен: 27.05.2003, 10:03
Отправитель: vdr (vadim@define.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Ramzes

Добрый день, vdr!
Первое у тебя врядли получится, т.к как только ты передашь свой пакет драйверу сетевой карты, она тут же запакует его в кадр Ethernet - именно для этого он и создан :))
Пиши собственный драйвер.
Насчет сниффера - для Транспортного и сетевого уровня используй функцию
int WSAIoctl(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
где в качесве dwControlCode надо передать константу SIO_RCVALLL (0x98000001), которая сообщит твоему сетевому адаптеру чтоб он не отбрасывал все пакеты не относящиеся к твоему хосту.
А насчет сниффера на канальном уровне - опять же придется писать драйвер, никуда не денешся :))
Насчет архитектуры сети - используй протокол SNMP - Simple Network Management Protocol.

Ответ отправлен: 27.05.2003, 16:15
Отправитель: Ramzes


Отвечает [MozgC]

По-моему ты все усложняешь... Т.е. я думаю это все делается проще, а послушав тебя, ощущение, как будто там все так сложно и т.д., хотя я сам не писал такие проги, я вообщем твое письмо передам другу, мож он тебе даст ссылки или примеры программ.

Ответ отправлен: 27.05.2003, 20:40
Отправитель: [MozgC]


 Вопрос № 803


Всем Hi!
У меня стаит Visual C++ 6.0 со всеми причиндалми, иногда при загрузке не которых страниц из Интернета если на них есть ошибки он (Microsoft Visual InterDev 6.0) спрашивает, что на этой странице есть ошибка, желаю ли я запустить дебагер. Как это можно отключить? Надоело каждый раз говорить нет.
Best regards
alexneta.



Вопрос отправлен: 27.05.2003, 13:07
Отправитель: alexneta

[Следующий вопрос >>] [Список вопросов]

Отвечает Hayk

Здравствуйте, alexneta!
V IE zaidite Tools/Internet Options/Advanced i vkluchite ptichku Disable Script debugging

Ответ отправлен: 27.05.2003, 13:35
Отправитель: Hayk


Отвечает Ramzes

Приветствую Вас, alexneta!
В Internet Explorer - Tools->Internet Options->Advanced->Disable Script Debugging

Ответ отправлен: 27.05.2003, 16:16
Отправитель: Ramzes


Отвечает xiron

Доброе время суток, alexneta!
Вообщето вопрос не очень по теме !
В Internet Explorer - е Tools/Internet Options есть
Display a notification about every script error


Ответ отправлен: 27.05.2003, 17:07
Отправитель: xiron


Отвечает [MozgC]

В настройках IE -> Tools -> Internet Options -> Advanced -> Disable Script Debugging


Ответ отправлен: 27.05.2003, 20:51
Отправитель: [MozgC]


 Вопрос № 804

Здравствуйте эксперты.
Подскажите пожалуйста как реализовать перегрузку равенства в своем классе, чтобы выполянлось равенство простого типа моему( int A = myType). Вот примерно так:
MyClass X;
int a;
X = 10;// это я реализовал, все работает
a = X; // а вот как это перегрузить?
Компилятор VC++6.0.
Заранее благодарен.



Вопрос отправлен: 27.05.2003, 13:20
Отправитель: Kydesnik (brothers@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Hayk

Приветствую Вас, Kydesnik!
Nevozmojno v yazike C/C++ obyavit' operator takogo vida
int operator =( int , CSomeClass ) ;
Specifikaciya yazika ne pozvolyayet. Vyxod iz polojeniya, peregrujai operatore privedeniya tipa (). V etom sluchaye u tebya kod budet vyglyadet' tak
a = ( int )X ;

Ответ отправлен: 27.05.2003, 14:23
Отправитель: Hayk


Отвечает xiron

Здравствуйте, Kydesnik!
Вообщето надо перегрузить оператор преобразования типов
class MyClass
{
public:
MyClass( int num ) { i = num; }

оperator int() const { return i; } // преобразование в int
private:
int i;
};
int main()
{
MyClass X;
int a;
a = X;
}

Ответ отправлен: 30.05.2003, 14:17
Отправитель: xiron


Отвечает Vdr

Добрый день, Kydesnik!
По идее никак. Дело в том что во втором случае равенство принадлежит int а не твоему классу, а перегрузить int нельзя.

Ответ отправлен: 27.05.2003, 13:41
Отправитель: Vdr


Отвечает Avl2k

Добрый день, Kydesnik!
Нужно определить в классе оператор приведения к int'у, например:
class X
{
public:
operator int() const { return 21; }
};
С уважением, Avl2k.

Ответ отправлен: 27.05.2003, 13:54
Отправитель: Avl2k


Отвечает Yuri Gordienko

Доброе время суток, Kydesnik!
Интересно, спрашиваешь про перегрузку оператора равенства, а пример показываешь об операторе присваивания и приведения.
Пойдем от второго случая:
class MyClass
{
public:
MyClass(int x):z(x){}
operator int()const{ return z; }
private:
int z;
};
int main(){
MyClass X(10);
int a = X;
}
Удачи


Ответ отправлен: 27.05.2003, 13:59
Отправитель: Yuri Gordienko


Отвечает Dzik

Добрый день, Kydesnik!
Сделай оператор преобразования к этому типу.

Ответ отправлен: 27.05.2003, 15:03
Отправитель: Dzik


Отвечает BOLT

Приветствую Вас, Kydesnik!
Примерно так:
int MyClass::operator=()
{
return integer;
}
integer - это приватный член класса, который присваивается переменной a.
Счастливо!

Ответ отправлен: 27.05.2003, 17:53
Отправитель: BOLT


Отвечает [MozgC]

По-моему так как ты написал - нельзя перегрузить, неправильный синтаксис для этого

Ответ отправлен: 27.05.2003, 20:54
Отправитель: [MozgC]


 Вопрос № 805

Здравствуйте, эксперты!
У меня к вам вопрос: я пишу прогу под Win32. Она должна запускать другие проги (консольные) и перехватывать их ввод-вывод с собственной консоли к себе в буфера, чтобы потом их запихать в сокет. Читал много мануалов, но все api работают как-то не так как там написано. Не могли бы помочь с кусочком кода, который корректно читает и пишет в чужую консоль. Заранее спасибо.



Вопрос отправлен: 27.05.2003, 13:40
Отправитель: CoolerTheGreat

[Следующий вопрос >>] [Список вопросов]

Отвечает Avl2k

Приветствую Вас, CoolerTheGreat!
См. пример из MSDN'а: Creating a Child Process with Redirected Input and Output
С уважением, Avl2k.
#include <stdio.h>
#include <windows.h>

#define BUFSIZE 4096

HANDLE hChildStdinRd, hChildStdinWr, hChildStdinWrDup,
hChildStdoutRd, hChildStdoutWr, hChildStdoutRdDup,
hInputFile, hSaveStdin, hSaveStdout;

BOOL CreateChildProcess(VOID);
VOID WriteToPipe(VOID);
VOID ReadFromPipe(VOID);
VOID ErrorExit(LPTSTR);
VOID ErrMsg(LPTSTR, BOOL);

DWORD main(int argc, char *argv[])
{
SECURITY_ATTRIBUTES saAttr;
BOOL fSuccess;

// Set the bInheritHandle flag so pipe handles are inherited.

saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;

// The steps for redirecting child process's STDOUT:
// 1. Save current STDOUT, to be restored later.
// 2. Create anonymous pipe to be STDOUT for child process.
// 3. Set STDOUT of the parent process to be write handle to
// the pipe, so it is inherited by the child process.
// 4. Create a noninheritable duplicate of the read handle and
// close the inheritable read handle.

// Save the handle to the current STDOUT.

hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);

// Create a pipe for the child process's STDOUT.

if (! CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
ErrorExit("Stdout pipe creation failed\n");

// Set a write handle to the pipe to be STDOUT.

if (! SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr))
ErrorExit("Redirecting STDOUT failed");

// Create noninheritable read handle and close the inheritable read
// handle.
fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdoutRd,
GetCurrentProcess(), &hChildStdoutRdDup , 0,
FALSE,
DUPLICATE_SAME_ACCESS);
if( !fSuccess )
ErrorExit("DuplicateHandle failed");
CloseHandle(hChildStdoutRd);
// The steps for redirecting child process's STDIN:
// 1. Save current STDIN, to be restored later.
// 2. Create anonymous pipe to be STDIN for child process.
// 3. Set STDIN of the parent to be the read handle to the
// pipe, so it is inherited by the child process.
// 4. Create a noninheritable duplicate of the write handle,
// and close the inheritable write handle.

// Save the handle to the current STDIN.

hSaveStdin = GetStdHandle(STD_INPUT_HANDLE);

// Create a pipe for the child process's STDIN.

if (! CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
ErrorExit("Stdin pipe creation failed\n");

// Set a read handle to the pipe to be STDIN.

if (! SetStdHandle(STD_INPUT_HANDLE, hChildStdinRd))
ErrorExit("Redirecting Stdin failed");

// Duplicate the write handle to the pipe so it is not inherited.

fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdinWr,
GetCurrentProcess(), &hChildStdinWrDup, 0,
FALSE, // not inherited
DUPLICATE_SAME_ACCESS);
if (! fSuccess)
ErrorExit("DuplicateHandle failed");

CloseHandle(hChildStdinWr);

// Now create the child process.

fSuccess = CreateChildProcess();
if (! fSuccess)
ErrorExit("Create process failed");

// After process creation, restore the saved STDIN and STDOUT.

if (! SetStdHandle(STD_INPUT_HANDLE, hSaveStdin))
ErrorExit("Re-redirecting Stdin failed\n");

if (! SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout))
ErrorExit("Re-redirecting Stdout failed\n");

// Get a handle to the parent's input file.

if (argc > 1)
hInputFile = CreateFile(argv[1], GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
else
hInputFile = hSaveStdin;

if (hInputFile == INVALID_HANDLE_VALUE)
ErrorExit("no input file\n");

// Write to pipe that is the standard input for a child process.

WriteToPipe();

// Read from pipe that is the standard output for child process.

ReadFromPipe();

return 0;
}

BOOL CreateChildProcess()
{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
BOOL bFuncRetn = FALSE;

// Set up members of the PROCESS_INFORMATION structure.

ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );

// Set up members of the STARTUPINFO structure.

ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
siStartInfo.cb = sizeof(STARTUPINFO);

// Create the child process.

bFuncRetn = CreateProcess(NULL,
"child", // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
0, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo); // receives PROCESS_INFORMATION

if (bFuncRetn == 0) {
ErrorExit("CreateProcess failed\n");
return 0;
} else {
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
return bFuncRetn;
}
}
}

VOID WriteToPipe(VOID)
{
DWORD dwRead, dwWritten;
CHAR chBuf[BUFSIZE];

// Read from a file and write its contents to a pipe.

for (;;)
{
if (! ReadFile(hInputFile, chBuf, BUFSIZE, &dwRead, NULL) ||
dwRead == 0) break;
if (! WriteFile(hChildStdinWrDup, chBuf, dwRead,
&dwWritten, NULL)) break;
}

// Close the pipe handle so the child process stops reading.

if (! CloseHandle(hChildStdinWrDup))
ErrorExit("Close pipe failed\n");
}

VOID ReadFromPipe(VOID)
{
DWORD dwRead, dwWritten;
CHAR chBuf[BUFSIZE];
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
// Close the write end of the pipe before reading from the
// read end of the pipe.

if (!CloseHandle(hChildStdoutWr))
ErrorExit("Closing handle failed");

// Read output from the child process, and write to parent's STDOUT.

for (;;)
{
if( !ReadFile( hChildStdoutRdDup, chBuf, BUFSIZE, &dwRead,
NULL) || dwRead == 0) break;
if (! WriteFile(hSaveStdout, chBuf, dwRead, &dwWritten, NULL))
break;
}
}

VOID ErrorExit (LPTSTR lpszMessage)
{
fprintf(stderr, "%s\n", lpszMessage);
ExitProcess(0);
}

// The code for the child process.
#include <windows.h>
#define BUFSIZE 4096

VOID main(VOID)
{
CHAR chBuf[BUFSIZE];
DWORD dwRead, dwWritten;
HANDLE hStdin, hStdout;
BOOL fSuccess;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
hStdin = GetStdHandle(STD_INPUT_HANDLE);
if ((hStdout == INVALID_HANDLE_VALUE) ||
(hStdin == INVALID_HANDLE_VALUE))
ExitProcess(1);

for (;;)
{
// Read from standard input.
fSuccess = ReadFile(hStdin, chBuf, BUFSIZE, &dwRead, NULL);
if (! fSuccess || dwRead == 0)
break;

// Write to standard output.
fSuccess = WriteFile(hStdout, chBuf, dwRead, &dwWritten, NULL);
if (! fSuccess)
break;
}
}


Ответ отправлен: 28.05.2003, 18:28
Отправитель: Avl2k



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (31)
Perl (5)
Builder / Delphi (15)
Pascal (28)
Basic / VBA (12)
Java / JavaScript (11)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (31)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (10)
Юристу
Гражданское право (5)
Семейное право (2)
Трудовое право (3)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное