задание: написать программу сканирующие все каталоги под Linux(FreeBSD,...) и выводящуюю список всех инодов, на которые ссылается 2 и более файлов. Для каждого такого инода вывести также список этих файлов. Собсно проблема. Дома под SuSE Linux все вроде как отлично работает. А когда на следующий день пошел лабу сдавать, вот получился большой облом, там у нам FreeBSD, и к серваку коннектимся через Putty. Короче говоря моя програ там отказывается ходить по каталогам, в чем проблема я незнаю. предположительно функция opendir() не возвращает ссылку на открытый каталог или не может его открыть. А может все проблема в том что прога запускается не слокальной машины(очень сомневаюсь). Вы ее откомпилируйте, посмотрите, будет ли она у вас работать?
Здравствуйте, 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. вот еще: а где такое лучше писать Билдер или Визуал? заранее спасибо.
Здравствуйте, вова! В первом ты не ошибся, но в обычной ситуации для программ запускаемых с диска не используют какие-либо сервера которые пользователь должен хотябы иметь. Проще использовать таблицы 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) Дополнительную заинтересованность вызывает работа с хабами и свичами - возможно ли от них получить какие-то данные. Например, можно ли произведя опрос оборудования построить архитектуру сети? Суть всей проблемы заключается в том, что теорию я знаю прекрасно, а вот в практической части - полный ноль. Особо буду благодарен за примеры и ссылки в русский сегмент сети. Извините за слишком глобальный вопрос. Заранее спасибо!
Добрый день, 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.
Здравствуйте, 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. Заранее благодарен.
Приветствую Вас, 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 работают как-то не так как там написано. Не могли бы помочь с кусочком кода, который корректно читает и пишет в чужую консоль. Заранее спасибо.
// 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");
// 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 (;;) { // 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.